Java 7에서의 종료
폐쇄란 무엇입니까?Java 7에 포함될 예정입니다.(Closure는 Java 7에 포함되도록 논의되었지만 결국 포함되지 않았습니다.) Closure에 대해 배울 수 있는 신뢰할 수 있는 참고 자료를 제공해 주실 수 있습니까?
폐쇄는 폐쇄 범위의 변수에 대한 액세스로 참조(및 전달)할 수 있는 코드 블록입니다.
Java 1.1 이후 익명 내부 클래스는 이 기능을 매우 상세하게 제공하고 있습니다.또, 사용 가능한 것이 한정되어 있습니다.final
(비(非)도 final
로컬 변수는 범위 내에 있지만 사용할 수 없습니다.)
Java SE 8은 "lambdas"라고 불리는 단일 메서드 인터페이스*에 대해 보다 간결한 버전을 제공하도록 의도되어 있습니다.람다에는 익명 내부 클래스와 거의 동일한 제한이 있지만 일부 세부 사항은 랜덤으로 다릅니다.
람다는 람다 프로젝트와 JSR 335로 개발되고 있다.
*원래 디자인은 단일 추상 방식(SAM) 유형을 사용할 수 있도록 더 유연했습니다.유감스럽게도 새로운 설계는 유연성은 떨어지지만 인터페이스 내 구현을 허용하는 것은 정당화하려고 합니다.
이것은 Neal Gafter의 블로그입니다.자바의 폐쇄를 도입한 선구자 중 하나입니다.2007년 1월 28일부터의 휴업에 관한 그의 글은 A Definition of Closures로 명명되었다. 그의 블로그에는 비디오뿐만 아니라 당신을 시작할 수 있는 많은 정보가 있다.여기에도 훌륭한 구글 토크 - 프로그래밍 언어의 고급 토픽 - Neal Gafter와 Java를 위한 클로징이 있습니다.
폐쇄는 폐쇄 범위의 변수에 대한 액세스로 참조(및 전달)할 수 있는 코드 블록입니다.
Wikipedia에서 JavaScript의 클로징 예를 에뮬레이트하고 자바로의 "스트레이트" 번역을 실시합니다.
//ECMAScript
var f, g;
function foo() {
var x = 0;
f = function() { return ++x; };
g = function() { return --x; };
x = 1;
print('inside foo, call to f(): ' + f()); // "2"
}
foo();
print('call to g(): ' + g()); // "1"
print('call to f(): ' + f()); // "2"
이제 자바 파트:Function1은 arity 1(1개의 인수)을 가진 "Functor" 인터페이스입니다.Closure는 Function1을 구현하는 클래스입니다.Function1은 함수로 기능하는 구체적인 Functor(int -> int)입니다.main() 메서드에서는 foo를 Closure 객체로 인스턴스화하고 JavaScript 예제에서 콜을 복제합니다.IntBox 클래스는 단순한 컨테이너이며 1int의 배열처럼 작동합니다.
int a[1] = {0}
interface Function1 {
public final IntBag value = new IntBag();
public int apply();
}
class Closure implements Function1 {
private IntBag x = value;
Function1 f;
Function1 g;
@Override
public int apply() {
// print('inside foo, call to f(): ' + f()); // "2"
// inside apply, call to f.apply()
System.out.println("inside foo, call to f.apply(): " + f.apply());
return 0;
}
public Closure() {
f = new Function1() {
@Override
public int apply() {
x.add(1);
return x.get();
}
};
g = new Function1() {
@Override
public int apply() {
x.add(-1);
return x.get();
}
};
// x = 1;
x.set(1);
}
}
public class ClosureTest {
public static void main(String[] args) {
// foo()
Closure foo = new Closure();
foo.apply();
// print('call to g(): ' + g()); // "1"
System.out.println("call to foo.g.apply(): " + foo.g.apply());
// print('call to f(): ' + f()); // "2"
System.out.println("call to foo.f.apply(): " + foo.f.apply());
}
}
인쇄 내용:
inside foo, call to f.apply(): 2
call to foo.g.apply(): 1
call to foo.f.apply(): 2
닫힘에 대한 정의는 이 Wiki 페이지를 참조하십시오.
Java 8에서 종료하기 위한 이 페이지
또, 이 Q&A: Java 7에서의 클로징도 봐 주세요.
Java Closures는 J2SE 8의 일부가 될 것이며 2012년 말까지 출시될 예정이다.
Java 8의 폐쇄 지원에는 람다 식, 방법 참조, 생성자 참조 및 기본 방법이 포함됩니다.
상세한 것에 대하여는, http://amitrp.blogspot.in/2012/08/at-first-sight-with-closures-in-java.html 를 참조해 주세요.
네, 클로저(Lambda Expressions)는 곧 출시될 Java SE 8의 새로운 기능입니다.상세한 것에 대하여는, 다음의 링크를 참조해 주세요.http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Java 5, 6, 7의 클로징 실장
http://mseifed.blogspot.se/2012/09/bringing-closures-to-java-5-6-and-7.html
그 안에는 원하는 모든 것이 담겨 있다...
언급URL : https://stackoverflow.com/questions/5443510/closure-in-java-7
'sourcecode' 카테고리의 다른 글
"알림:정의되지 않은 변수", "알림:정의되지 않은 인덱스", "경고:정의되지 않은 배열 키" 및 "알림:PHP를 사용한 정의되지 않은 오프셋" (0) | 2022.09.15 |
---|---|
$http 응답 처리 중 서비스 중 (0) | 2022.09.15 |
SQLSTATE[HY000 [ 2002 ]라벨 홈스테드 내에서 접속이 거부되었습니다. (0) | 2022.09.15 |
Android: 확인란 수신기 (0) | 2022.09.15 |
JSON에서 Panda Data Frame으로 (0) | 2022.09.15 |