Java에는 최대 절전 모드에서 세션을 열 때 사용할 수있는 using 문이 있습니까?
C #에서는 다음과 같습니다.
using (var session = new Session())
{
}
따라서 개체가 범위를 벗어나 자동으로 닫힙니다.
답변
Java 7 은이 기능을 Java 플랫폼에 제공하는 자동 리소스 블록 관리 를 도입했습니다 . 이전 버전의 Java에는 using
.
예를 들어 java.lang.AutoCloseable
다음과 같은 방식으로 구현하는 모든 변수를 사용할 수 있습니다 .
try(ClassImplementingAutoCloseable obj = new ClassImplementingAutoCloseable())
{
...
}
java.io.Closeable
스트림으로 구현 된 Java의 인터페이스는 자동으로 확장 AutoCloseable
되므로 try
C # using
블록 에서 사용하는 것과 동일한 방식으로 블록에서 스트림을 이미 사용할 수 있습니다 . 이것은 C #의 using
.
현재 버전 5.0, 최대 절전 모드 세션 구현AutoCloseable
및 ARM 블록에 자동으로 폐쇄 될 수 있습니다. 이전 버전의 Hibernate SessionAutoCloseable
에서는 . 따라서이 기능을 사용하려면 Hibernate> = 5.0에 있어야합니다.
답변
Java 7 이전에는 Java에 이러한 기능 이 없었 습니다 (Java 7 이상에서는 ARM 에 관한 Asaph 의 답변 참조 ).
수동으로해야 했는데 고통 스러웠습니다 .
AwesomeClass hooray = null;
try {
hooray = new AwesomeClass();
// Great code
} finally {
if (hooray!=null) {
hooray.close();
}
}
그리고 그것은 예외를 던질 수도 // Great code
없고 hooray.close()
던질 수도 없는 코드 일뿐 입니다.
정말로 변수의 범위를 제한하려는 경우 간단한 코드 블록이 작업을 수행합니다.
{
AwesomeClass hooray = new AwesomeClass();
// Great code
}
그러나 그것은 아마도 당신이 의미 한 것이 아닐 것입니다.
답변
Java 7부터 http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec
질문의 코드 구문은 다음과 같습니다.
try (Session session = new Session())
{
// do stuff
}
주의 Session
필요가 구현 AutoClosable
하거나 (많은) 하위 인터페이스 중 하나.
답변
기술적으로 :
DisposableObject d = null;
try {
d = new DisposableObject();
}
finally {
if (d != null) {
d.Dispose();
}
}
답변
가장 가까운 자바에 해당하는 것은
AwesomeClass hooray = new AwesomeClass();
try{
// Great code
} finally {
hooray.dispose(); // or .close(), etc.
}