Что такое эквивалент «отложить» для Java

Это всего лишь короткий пример кода Go:

package main

import "fmt"

func main() {
    defer fmt.Println("world") //use of keyword 'defer'

    fmt.Println("hello")
}

Я нахожу эквивалент «отложить» в Java.

Вместо «отложить» я могу использовать

try {
    //do something
} finally {
    //code using defer
}

Есть ли альтернатива без использования try/catch/finally?


person Romeo    schedule 22.04.2015    source источник
comment
Вы хотите выполнить уборку?   -  person mbsingh    schedule 22.04.2015
comment
Что не так с finally?   -  person Radiodef    schedule 22.04.2015
comment
да, очистка, например, закрытие соединения и освобождение памяти..   -  person Romeo    schedule 22.04.2015
comment
Прямого перевода нет, и то, как вы пишете go, не соответствует тому, как вы пишете java.   -  person Paul Hankin    schedule 22.04.2015


Ответы (2)


В Java 7 есть инструкция try-with-resources.

Оператор try-with-resources — это оператор try, который объявляет один или несколько ресурсов. Ресурс — это объект, который должен быть закрыт после того, как программа закончит работу с ним. Оператор try-with-resources гарантирует, что каждый ресурс будет закрыт в конце оператора. В качестве ресурса может использоваться любой объект, реализующий java.lang.AutoCloseable, включая все объекты, реализующие java.io.Closeable.

В следующем примере считывается первая строка из файла. Он использует экземпляр BufferedReader для чтения данных из файла. BufferedReader — это ресурс, который необходимо закрыть после того, как программа закончит работу с ним:

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}

В этом примере ресурс, объявленный в инструкции try-with-resources, является BufferedReader. Оператор объявления появляется в круглых скобках сразу после ключевого слова try. Класс BufferedReader в Java SE 7 и более поздних версиях реализует интерфейс java.lang.AutoCloseable. Поскольку экземпляр BufferedReader объявлен в инструкции try-with-resource, он будет закрыт независимо от того, завершается ли инструкция try нормально или внезапно (в результате того, что метод BufferedReader.readLine выдает исключение IOException).

person IamNaN    schedule 22.04.2015

В java 7 и выше вы можете использовать try-with-resource:

public static String readFirstLineFromFile(String path) throws IOException {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
     return br.readLine();
  }
}

когда вы выйдете из попытки, документация ресурса будет закрыта: ссылка

person igreenfield    schedule 22.04.2015