Как я должен реплицировать функциональность C # 'использование' оператора в Java? - PullRequest
4 голосов
/ 05 июля 2010

Я конвертирую некоторый код C # в Java, и он содержит оператор using. Как я должен повторить эту функциональность в Java? Я собирался использовать блок try, catch, finally, но я подумал, что сначала свяжусь с вами, ребята.

Ответы [ 3 ]

8 голосов
/ 05 июля 2010

Это верно.Блок AC # с использованием в любом случае просто синтаксический сахар.Ближайший Java-эквивалент для IDisposable: Closeable.

Существует предложение (уже частично зафиксированное), которое называется Автоматическое управление ресурсами , для добавления аналогичных функций.в Java 7. Он будет использовать try-finally за кулисами и предложит создать новый интерфейс Disposable (который будет суперинтерфейсом Closeable).

2 голосов
/ 06 июля 2010

Стандартная идиома для обработки ресурсов в Java:

final Resource resource = acquire();
try {
    use(resource);
} finally {
    resource.dispose();
}

К распространенным ошибкам относятся попытки использования одного и того же оператора try с перехватом исключений и последующим выполнением беспорядка с null sи все такое.

Идиома Execute Around может извлекать подобные конструкции, хотя синтаксис Java многословен.

executeWith(new Handler() { public void use(Resource resource) {
    ...
}});
0 голосов
/ 05 июля 2010

Не забудьте проверить ноль!То есть

using(Reader r = new FileReader("c:\test")){
    //some code here
}

должно быть переведено в нечто вроде

Reader r = null;
try{
    //some code here
}
finally{
    if(r != null){
         r.close()
    }
}

А также наиболее близко () в исключениях броска Java, поэтому проверьте DbUtils.closeQuietly если вы хотите, чтобы ваш код был более c # как

...