2012-05-31 4 views
2
Class clazz = new Object(){}.getClass(); 

왜 이것이 가능하며 어떤 의미일까요? 누군가 제발 상기시켜 줄래? 예를 들어Object() {}와 같은 자바 구문

:

public class Testing { 
    public static void main(String[] args) { 
     Class clazz = new Object(){}.getClass(); 
     System.out.println(clazz); 
    } 
} 

결과는 다음 class Testing$1

답변

4

Object의 하위 클래스로 분류 된 익명의 내부 클래스를 만듭니다. 나는 빈 몸 본 적이 주요 사용은 Guice에, 제네릭 형식 인수를 캡처하는 데 사용 TypeLiteral을 위해 : 유형의 삭제 하지 여기에 슈퍼 클래스에 적용 않기 때문에

key = new TypeLiteral<List<String>>() {}; 

유용 따라서 Guice는 List<String> 부분을 가져올 수 있으며 이는 일반 클래스 리터럴로 표현할 수 없습니다.

9

new Object(){}Object의 서브 클래스와 같은 anonymous inner class을 생성한다. Testing의 내부 클래스이므로 컴파일러에서 생성 한 이름과 같은 이름이 생성됩니다.

1

그에게 다음과 같은 코드와 동일한에게 :

public class Testing{ 
     private class Anon extends Object{ 
     } 
     public static void main(String[] args) { 
      Class clazz = new Anon().getClass(); 
      System.out.println(clazz); 
     } 
} 

Testing$1는 클래스의 이름이고,이 클래스 테스트에 정의 된 첫 번째 익명 클래스 인.

이러한 익명 클래스는 인터페이스를 사용하는 장소에서 인터페이스를 구현하는 데 사용할 수 있으며 로컬 최종 변수에 액세스 할 수 있습니다.

final String text = "Written by new Thread"; 
Thread thread = new Thread(new Runnable(){ 
    public void run(){ 
     System.out.println(text); 
}}); 
thread.start(); 
관련 문제