2011-03-03 1 views
9

: ISomeName 위 것으로 someMethod과 동일한 서명()와 하나 개의 방법이있는 인터페이스가Java의 메소드 인수 안에 클래스 정의가 있습니까? 내가 처음으로이 양식에 자바 코드를 가로 질러 온

object.methodA(new ISomeName() { 
public void someMethod() { 
//some code 
} 
}); 

.

내가 이해할 수있는대로 ISomeName을 구현하는 새 nameclass 클래스를 정의하고 기본 생성자를 사용하여이 클래스의 객체를 만들고 methodA에 인수로 객체를 전달합니다.

이게 맞습니까?

이 기능의 이름은 무엇입니까?

+2

좋은 설명 여기 : http://stackoverflow.com/questions/3167427/is-this-considered-an-inline-anonymous-method –

+0

(여기서 클래스를 non-args가없는 생성자로 확장하면 , 명백한 구문을 사용하여 인수를 전달할 수 있습니다. 그러나 매우 드뭅니다.) –

답변

4

anonymous class을 생성 중입니다. 변수의이의 생성자에 전달된다

final String name = getName(); 

Thread t = new Thread(new Runnable() { 
    @Override public void run() { 
     System.out.println(name); 
    } 
}); 
t.start(); 

값 : 익명 클래스 내에서, 당신은 최종 매개 변수를 포함하여, 방법의 이전 코드 내에서 최종 지역 변수를 참조 할 수 있습니다

주 익명의 클래스. 이것은 closures의 약한 형태입니다 (제한 때문에 약합니다 : 값만 복사되므로 변수가 최종해야합니다).

1

자바에서 익명 클래스라고합니다. 즉, ISomeName 인터페이스를 구현하는 익명의 클래스를 작성해, methodA에 인수로서 건네주는 것을 의미합니다.

관련 문제