繁体   English   中英

获取接口上的注释值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM