Java에 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
되므로 try
C # using
블록 에서 사용하는 것과 동일한 방식으로 블록에서 스트림을 이미 사용할 수 있습니다 . 이것은 C #의 using
.
현재 버전 5.0, 최대 절전 모드 세션 구현AutoCloseable
및 ARM 블록에 자동으로 폐쇄 될 수 있습니다. 이전 버전의 Hibernate SessionAutoCloseable
에서는 . 따라서이 기능을 사용하려면 Hibernate> = 5.0 상태 여야합니다.
자바 7 전에 ,이 없었다 에는 자바와 같은 기능 (자바 7에 대한 최대 참조 아삽 의 대답 에 대한 ARM을 ).
수동으로해야 했는데 고통 스러웠습니다 .
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
해당하는 문 이 없습니다 .
지금은 아닙니다.
그러나 Java 7 용 ARM 제안이 있습니다.
리소스 관리에 관심이있는 경우 Project Lombok 에서 @Cleanup
주석을 제공합니다 . 사이트에서 직접 가져옴 :
를 사용
@Cleanup
하여 코드 실행 경로가 현재 범위를 벗어나기 전에 지정된 리소스가 자동으로 정리되도록 할 수 있습니다 . 다음@Cleanup
과 같은 주석으로 지역 변수 선언에 주석을 달면됩니다.
@Cleanup InputStream in = new FileInputStream("some/file");
결과적으로 사용자가있는 범위의 끝에서이
in.close()
호출됩니다. 이 호출은 try / finally 구성을 통해 실행됩니다. 이것이 어떻게 작동하는지 아래의 예를보십시오.정리하려는 객체 유형에
close()
메서드가 없지만 인수가없는 다른 메서드가있는 경우 다음과 같이이 메서드의 이름을 지정할 수 있습니다.
@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0);
기본적으로 정리 방법은
close()
. 인수를받는 정리 메서드는를 통해 호출 할 수 없습니다@Cleanup
.
바닐라 자바
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
out.close();
}
} finally {
in.close();
}
}
}
롬복과 함께
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
Java 8에서는 try를 사용할 수 있습니다. 다음 페이지를 참조하십시오. http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
이 Java 키워드 목록을 참조하십시오 .
using
키워드는 불행하게도 목록의 일부가 아닙니다.- And there is also no equivalence of the C#
using
keyword through any other keyword as for now in Java.
To imitate such "using"
behaviour, you will have to use a try...catch...finally
block, where you would dispose of the resources within finally
.
ARM blocks, from project coin will be in Java 7. This is feature is intended to bring similar functionality to Java as the .Net using syntax.
To answer the question regarding limiting scope of a variable, instead of talking about automatically closing/disposing variables.
In Java you can define closed, anonymous scopes using curly brackets. It's extremely simple.
{
AwesomeClass hooray = new AwesomeClass()
// Great code
}
The variable hooray
is only available in this scope, and not outside it.
This can be useful if you have repeating variables which are only temporary.
For example, each with index. Just like the item
variable is closed over the for loop (i.e., is only available inside it), the index
variable is closed over the anonymous scope.
// first loop
{
Integer index = -1;
for (Object item : things) {index += 1;
// ... item, index
}
}
// second loop
{
Integer index = -1;
for (Object item : stuff) {index += 1;
// ... item, index
}
}
I also use this sometimes if you don't have a for loop to provide variable scope, but you want to use generic variable names.
{
User user = new User();
user.setId(0);
user.setName("Andy Green");
user.setEmail("andygreen@gmail.com");
users.add(user);
}
{
User user = new User();
user.setId(1);
user.setName("Rachel Blue");
user.setEmail("rachelblue@gmail.com");
users.add(user);
}
참고URL : https://stackoverflow.com/questions/2943542/using-keyword-in-java
'IT Share you' 카테고리의 다른 글
jquery는 첫 번째 요소를 제외한 모든 요소를 제거합니다. (0) | 2020.12.06 |
---|---|
iOS에서 상태 표시 줄을 숨기는 방법은 무엇입니까? (0) | 2020.12.05 |
div 내부에서 이미지를 세로로 정렬하는 방법 (0) | 2020.12.05 |
Android-4.0.x 용 Sencha Touch 2 PhoneGap 문제 (0) | 2020.12.05 |
Mondrian : 사용할 집계 테이블을 가져올 수없는 것 같습니다. (0) | 2020.12.05 |