2010-07-09 3 views
11

자바 7은 마침내 클로저를 가질 것이고, 단일 메소드 클래스/인터페이스 (예 : Runnable, Comparator 등)를 사용하는 기존 코드가 현재 어떻게 사용되는지 궁금합니다.Java에서 클로저로 인터페이스를 대체/보완하는 방법은 무엇입니까?

해당 코드를 대체 하시겠습니까? 어떤 종류의 전환이 될 것입니까? 클로저를 사용하는 추가 메서드가 추가됩니까?

누군가가 어떻게 작동하는지/계획이 무엇인지 알고 있습니까?

.... 
File [] files = directory.listFiles(new FileFilter() 
         public boolean accept(File file) { 
          return file.getName().endsWith(".java"); 
         } 
        }); 

이 사람이이 Java7에서 작동하는 것입니다 방법을 알고 있는가 :

는 예를 들어, 오늘날 우리가하는 FileFilter를 사용 하는가?

클로저를 수신하기 위해 File.listFiles 메서드가 오버로드되었을 수 있습니까?

File [] files = directory.listFiles(#(File file){ 
        return file.getName().endsWith(".java"); 
       }); 
+0

http://stronglytypedblog.blogspot.com/2010/07/lambdas-in-java-preview-part-2.html이 문서를 참조하십시오. – Bozho

+0

@Bozho 해당 버전의 최신 버전을 참조하지 않았으므로 오래되었습니다. 제안서에는 기능 유형이 없습니다. – ColinD

+0

http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-3.html – OscarRyz

답변

8

이 클래스/인터페이스는 SAM (싱글 추상 방법) 종류라고하며, SAM 유형에 람다의 전환은 JDK7에 대한 프로젝트 람다 제안의 핵심 부분이다. 사실, 제안의 가장 최근 반복은 함수 유형을 제거하고 만 SAM 유형의 인스턴스로 람다를 허용합니다. 지금 무엇 변함 listFiles(FileFilter)

File[] files = directory.listFiles(#(file){file.getName().endsWith(".java")}); 

: 구문의 최신 버전입니다 (하지 최종), 당신의 예처럼 쓸 수있다.

당신은 또한 당신은 또한 제안에 최신 업데이트하고 더 자세히 상황을 설명하고이 State of the Lambda 문서에서 살펴 봐야 할 수 있습니다

FileFilter javaFileFilter = {#(file){file.getName().endsWith(".java")}; 

작성할 수 있습니다. 또한 람다 표현식/블럭이 내가 설명한 것처럼 SAM 유형으로 사용 가능할 것이라는 것은 확실히 확신 할 수 있지만, 세부 사항은 모두 변경 될 수 있습니다.

+0

'#x (y) {return z;}'가 이미 JDK7에 푸시되었습니다. 이 람다를 현재 거기에 추가하거나'# '것을 완전히 제거 할 것입니까? SAM 변환은 훌륭하지만 Java 환경의 많은 부분을 자동으로 닫을 수 있습니다. – Esko

+0

'#int (int y) {return z;}'{y-> z}보다 낫다. – OscarRyz

+0

구문이 최종이 아니므로 다시 변경 될 수있다. 나는 많은 사람들이 그것을 좋아하지 않는다는 느낌을 받았다. 새 버전의 제안서에서 좋은 점은'{int y -> z}'가 아닌'{y -> z}'라는 람다에 대한 인수에 대한 형식 유추입니다. – ColinD

0

기존 코드는 영향을받지 않으므로 교체 할 필요가 없습니다.

관련 문제