2010-06-11 6 views
30

Java에서 익명 내부 클래스에 주석을 추가하는 방법이 있습니까?익명 내부 클래스에 주석 달기

이 예제에서는 Class2에 클래스 수준 주석을 추가 할 수 있습니까?

public void method1() { 
    add(new Class2() { 
    public void method3() {} 
    }); 
} 

답변

32

아니요. 적절한 등급으로 홍보해야합니다. 필요한 경우 외부 클래스 내에서 범위를 지정할 수 있으므로 최상위 클래스이거나 공용이 아니어도됩니다. 그러나 주석을 첨부하려면 적절한 클래스 정의가 필요합니다.

+2

의 범위는 방법과 디자인에 로컬 있도록 "적절한"클래스도, 방법 내에서 정의 할 수 있습니다 메서드의 내부 구현 세부 사항으로 남아 있습니다. – amichair

+0

@ amichair의 로컬 클래스에 대한 설명에 놀랐 으면 JDK8에 익숙하지 않으며 https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses에 문서가 있습니다. htaccess Admin Home English Language Content –

+0

분명히 로컬 클래스는 Java 1.1부터 주변에 있었지만 여전히 놀랍습니다 :-) – amichair

10

아직 없습니다. 이 기능은 JSR 308에서 제안되었으며 향후 Java 버전에 포함될 수 있습니다.

+7

명시적인 "번호"를 추가 할 수 있습니다. 그렇지 않으면 당신의 대답이 정신적 결함을 일으 킵니다. –

6

예, as mentioned by yegor256 일 수 있습니다. JDK 8 adopted JSR 308 (type annotations)부터 가능합니다.

이제 특수 효과가 @Target({ElementType.TYPE_USE})으로 장식 될 때마다 런타임에 익명의 클래스에 주석을다는 데 사용할 수 있습니다. 예를 들어 :

@Target({ ElementType.TYPE_USE }) 
@Retention(RetentionPolicy.RUNTIME) 
@interface MyAnnotation { 
    String value(); 
} 

Object o = new @MyAnnotation("Hello") Object() {}; 

까다로운 부분은 주석에 액세스하는 방법입니다 :

Class<?> c = o.getClass(); 
    AnnotatedType type = c.getAnnotatedSuperclass(); 
    System.out.println(Arrays.toString(type.getAnnotations())); 
+0

이러한 종류의 주석에 액세스하는 방법에 대한 문서가 있습니까? 이상한 반 직관적 인 o.getClass(). getAnnotatedSuperclass(). getAnnotations()를 사용하여 액세스해야하는 공식 문서를 찾을 수 없습니다. – Qw3ry

관련 문제