Java에 using 문이 있습니까? 수있는 using 문이 있습니까? C #에서는 다음과 같습니다. using

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되므로 tryC # 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.
}

답변

아니요, Java에는 using해당하는 문 이 없습니다 .