我很难弄清楚如何从java.lang.annotation.Annotation的实际实现类中获得对它的引用。
注释本身看起来如下(来自一个框架):
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresPermissions {
...snip...
}在我使用的代码中,我想做这样的事情:
Annotation requiresPermissionAnnotation = RequiresPermissions.class;在我的一生中,我无法弄清楚该怎么做,或者我能用什么打字来得到它。
作为一项工作,我可以有一个简单的类,它有一个带有这个注释的方法(和其他类),并且使用类上的反射方法来获得java.lang.annotation.Annotation,但是这看起来很奇怪。
谢谢!
发布于 2014-04-28 14:47:25
注释的实例只存在于带注释的类型/方法。这就是你能得到它的方法
Annotation requiresPermissionAnnotation = SomeAnnotatedClass.class.getAnnotation(RequiresPermissions.class);您可以转换为RequiresPermissions来访问任何属性。
RequiresPermissions requiresPermissions = (RequiresPermissions) requiresPermissionAnnotation;或者直接得到
RequiresPermissions requiresPermissions = SomeAnnotatedClass.class.getAnnotation(RequiresPermissions.class);为了一种方法
Annotation requiresPermissionAnnotation = someMethodInstance.getAnnotation(RequiresPermissions.class);发布于 2014-04-28 14:55:13
比方说,您有一些类MyClass,它使用RequiresPermissions注释进行注释:
@RequiresPermissions("something")
public class MyClass {
// ...
}如果您想在程序中看到MyClass注释的值,可以这样做:
RequiresPermissions anno = MyClass.class.getAnnotation(RequiresPermissions.class);
System.out.println(anno.value());(我不知道RequiresPermissions注释有哪些属性;您可以在anno对象上调用它们来获取值)。
发布于 2014-04-28 14:59:02
属性.class返回一个Class对象,您必须将其分配给任何超级类型的Class。它不是注释的实例,所以尝试将它分配给Annotation是行不通的。为了保持对注释类型的引用,您有几个选项:
// use the actual class
Class<MyAnnotation> annotationClass1 = MyAnnotation.class;
// use a bounded wildcard
Class<? extends Annotation> annotationClass2 = (Class<? extends Annotation>) MyAnnotation.class;
// use an unbound wildcard, not recommended
Class<?> annotationClass3 = MyAnnotation.class;https://stackoverflow.com/questions/23344165
复制相似问题