[英]Get the annotation value which is on an interface?
我使用的是Java7。 我在Marker界面上创建了一个自定义注释并对其进行了注释。
@SomeName(name="ABC")
public interface Bank{
}
下面是实现上述接口的类。
public class BankImpl implements Bank{
//some code
}
现在我在一个单独的类中有一个方法,它将上面的类作为输入:
public void someMethod(Class class){
//Here i need to get the custom annotation value
}
以上方法称为如下:
someMethod(BankImpl.class);
现在在someMethod()里面如何获得注释值?
谢谢!
String someMethod(Class<Bank> clazz){
SomeName sn = clazz.getAnnotation(SomeName.class);
return sn.name();
}
您只需要接口的类来获取在接口上注释的Annotation的所有内容。
问题是类本身没有注释,因此在请求注释时你会得到一个空值。 您真的需要查看类的所有层次结构(即超类和接口):
import java.util.*;
import java.lang.annotation.*;
@Retention(value=RetentionPolicy.RUNTIME)
@interface SomeName {
String name();
}
@SomeName(name = "ABC")
interface Bank {
}
class BankImpl implements Bank {
}
public class Test {
public void someMethod(Class c) {
Annotation annotation = c.getAnnotation(SomeName.class);
if (annotation == null) {
LinkedList<Class> queue = new LinkedList<Class>();
queue.addLast(c.getSuperclass());
for (Class cc : c.getInterfaces())
queue.addLast(cc);
while (!queue.isEmpty()) {
c = queue.removeFirst();
annotation = c.getAnnotation(SomeName.class);
if (annotation != null)
break;
}
}
if (annotation == null)
System.out.println("No such annotation !");
else
System.out.println("name is: " + ((SomeName)annotation).name());
}
public static void main(String... args) {
Test test = new Test();
test.someMethod(BankImpl.class);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.