Есть ли в Java оператор using, который можно использовать при открытии сеанса в спящем режиме?
В C # это примерно так:
using (var session = new Session())
{
}
Таким образом, объект выходит за рамки и автоматически закрывается.
java
hibernate
using-statement
мрбла
источник
источник
using
нужно. Сфера - это не время жизни (иusing
не время жизни, строго говоря, посколькуDispose
не разрушает память объекта)using statement
.using
, он автоматически удаляет объект в конце своей области видимости, но не освобождает объект - его время жизни не заканчивается, пока все его ссылки не исчезнут.Ответы:
Java 7 представила автоматическое управление блоком ресурсов, которое переносит эту функцию на платформу Java. Предыдущие версии Java не имели ничего похожего
using
.Например, вы можете использовать любую переменную, реализуемую
java.lang.AutoCloseable
следующим образом:java.io.Closeable
Интерфейс Java , реализованный потоками, расширяется автоматическиAutoCloseable
, поэтому вы уже можете использовать потоки вtry
блоке так же, как вы бы использовали их вusing
блоке C # . Это эквивалентно C #using
.Начиная с версии 5.0, сеансы Hibernate реализуются
AutoCloseable
и могут быть автоматически закрыты в блоках ARM. В предыдущих версиях Hibernate Session не реализованAutoCloseable
. Таким образом, вам нужно быть в Hibernate> = 5.0, чтобы использовать эту функцию.источник
using
делает).AutoCloseable
поэтому они еще не могут использовать ARM.AutoCloseable
не существовало до Java 7 не так ли?До Java 7 , не было нет такой функции в Java (для Java 7 и выше см Асафа ответ «s относительно ARM ).
Вам нужно было сделать это вручную, и это было больно :
И это просто код, когда
// Great code
ниhooray.close()
одно исключение и не может выдавать никаких исключений.Если вы действительно хотите ограничить только область видимости переменной, тогда простой блок кода выполнит свою работу:
Но, вероятно, вы имели в виду не это.
источник
// Great code
выдает исключение.horray
возможно, не был инициализирован в этот момент (исправлено сейчас).Начиная с Java 7 это происходит: http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec
Синтаксис кода в вопросе будет следующим:
Обратите внимание, что
Session
необходимо реализоватьAutoClosable
один из (многих) субинтерфейсов.источник
Технически:
источник
Ближайший Java-эквивалент -
источник
Нет, в Java нет
using
эквивалента оператора.источник
На данный момент нет.
Однако есть предложение ARM для Java 7.
источник
Если вас интересует управление ресурсами, Project Lombok предлагает
@Cleanup
аннотацию. Взято прямо с их сайта:Ванильная Ява
С Ломбоком
источник
В java 8 вы можете использовать try. См. Следующую страницу. http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
источник
См. Этот Список ключевых слов Java .
using
сожалению, это ключевое слово не входит в список.using
ключевого слова C # никакому другому ключевому слову на данный момент в Java.Чтобы имитировать такое
"using"
поведение, вам нужно будет использоватьtry...catch...finally
блок, в котором вы будете размещать ресурсы внутриfinally
.источник
using
это не ключевое слово, ничего не значит. Та же функция может быть (и будет!) Реализована с помощью другого ключевого слова, как упоминалось в @BalusC.using
отсутствие в списке ключевых слов Java означает, что эта функция отсутствует в языке Java. А это неправда.using
ключевого слова, ни эквивалента на данный момент. Спасибо, @Joachim Sauer! =)Блоки ARM из монеты проекта будут в Java 7. Эта функция предназначена для обеспечения аналогичной функциональности в Java, как в .Net, с использованием синтаксиса.
источник
Чтобы ответить на вопрос об ограничении области действия переменной, вместо того, чтобы говорить об автоматическом закрытии / удалении переменных.
В Java вы можете определять закрытые анонимные области, используя фигурные скобки. Все очень просто.
Переменная
hooray
доступна только в этой области, а не за ее пределами.Это может быть полезно, если у вас есть повторяющиеся переменные, которые являются временными.
Например, каждый с index. Так же, как
item
переменная закрывается в цикле for (т.е. доступна только внутри него),index
переменная закрывается в анонимной области.Я также иногда использую это, если у вас нет цикла for для предоставления области переменной, но вы хотите использовать общие имена переменных.
источник