2012-03-01 2 views
2

Android 1.6에서 개발 한 이후로 Java 1.6에서 Closure와 비슷한 것을 통합하는 방법을 찾고자했습니다.Java 또는 그와 유사한 것으로 닫음

내가 원하는 것은 (완벽한 세상에서) 나는 수업이있다. 우리는 그것을 "항목"이라고 부를 것이다.

다음 배열 목록이 있습니다. 그들의 각 하나에

ArrayList<Item> items = new ArrayList<item>; 

는 items.get (x)는 내가 전화했을 때 실행될 코드 블록을 저장할. 이 코드 블록은 ArrayList 항목이 들어있는 클래스의 범위에서 수행되어야합니다.

"items"가 들어있는 클래스에서 메서드를 만들고 각 "item"인스턴스에 함수 이름을 저장 한 다음 리플렉션을 사용하여 해당 메서드를 호출하는 것이 좋습니다. ..

나는 이것이 가능할 지 의심 스럽지만, 어느 곳에서나 답을 찾을 수있는 곳이다.

도움을 주셔서 미리 감사드립니다.

+1

할 각 "폐쇄"코드에 대한 익명의 클래스를 만들 수 있지만, 당신은 할 수 있습니다 [Jon Skeet의 기사] (http://csharpindepth.com/articles/chapter5/closures.aspx)를 통해 읽었을 때, 자바 (Java 7 이전)도 다루고 있습니다. –

답변

9

는 당신이 필요로하는 것은

interface Closure{ 
    public void exec(); 
} 

같은 인터페이스이며,이 응답하지 않습니다 당신이

Closure closure = new Closure() { 
    public void exec(){ 
     // code here 
    } 
} 
+0

흠,이게 어떻게 작동하는지 보려고하는데, 나는 조금 느린 것 같아. 그래서 Items 클래스에서 익명 클래스를 정의하겠습니까? 범위를 해당 Item 인스턴스로만 제한하지 않겠습니까? – JoeyG

+0

음,'Item'에 익명 클래스를 정의하고 싶다면'exec' 시그니처를 입력 받아 받아 들일 수 있고'exec'를 전달할 수 있습니다. – Chikei

+0

글쎄 저에게는 문제가 있습니다.이 코드 블록이 배열 List를 포함하고있는 클래스에있는 변수에 액세스 할 수 있기를 바랍니다. 그래서 그 주택 클래스에 정의 된 코드를 호출해야하지만, 아이템 클래스에 저장해야합니다. 너무 많이 묻는 것처럼 느껴집니다. 하하 – JoeyG

관련 문제