2012-12-13 35 views
0

我需要檢查一個註解,形成超類,如果派生類中有一個特定的註解:檢查派生類具有超類

public class SuperClass 
{ 
    public boolean hasAnnotation() 
    { 
    //super_class_method_code 
    } 
} 

@annotationToCheck 
public class DerivedClass extends SuperClass 
{ 
    //derived_class_code 
} 

有可能在Java中?我知道如何在C#做的,但在Java中我找不到任何解決辦法... :(

謝謝!

+1

這是在C#中的解決方案:http://stackoverflow.com/questions/10605884/access-on-attribute-of-extended-class-from-superclass/10605907#10605907 –

+0

[可此幫助] [1] [1]:http://stackoverflow.com/questions/3504870/how-to-test-if-one-java-class-extends-另一個在運行時 –

回答

6

如果您的實例實際上是子類型的是,這是一樣簡單在超定義方法有以下實現:

this.getClass().isAnnotationPresent(annotationToCheck.class); 

由於this是DerivedClass的情況下,返回的getClass和DerivedClass檢查工作

注2:由於@Pshemo提到的意見,這隻適用於w如果註釋使用@Retention(RetentionPolicy.RUNTIME)進行註釋。

+2

+1我只是補充說這適用於使用'@Retention(RetentionPolicy.RUNTIME)'策略的註釋。 – Pshemo

+0

Ohhhhh !!!!我忘了在我的註釋中指定@Retention(value = RetentionPolicy.RUNTIME)和@Target(value = ElementType.TYPE)!謝謝你Hiery和Pshemo! –

+0

@Pshemo很好的觀察!感謝您的補充。 –

0

使用reflections項目獲取派生類的另一種方法。這個反射項目有依賴關係(slf4j,log4j和javassist等)。


注:派生類應該只在提到的包中。

import java.util.Set; 

import org.reflections.Reflections; 

public class Base { 

    public Base() { 
     Reflections reflections = new Reflections("com.sree.despacerivedclasskage"); 
     Set<Class<? extends Base>> classes = reflections 
       .getSubTypesOf(Base.class); 
     System.out.println(classes); 
     for(Class clazz: classes){ 
      System.out.println(clazz.isAnnotationPresent(ToCheck.class)); 
     } 

    } 
public static void main(String[] args) { 
    Base b = new Base(); 
} 

}