对类中java.lang.annotation.annotation的引用



我很难弄清楚如何从其实际实现类中获得对java.lang.annation.annotation的引用。

注释本身看起来是这样的(从一个框架来看):

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresPermissions {
    ...snip...
}

在我的使用代码中,我想做这样的事情:

Annotation requiresPermissionAnnotation = RequiresPermissions.class;

在我的一生中,我都不知道该用什么或如何铸造它,或者我可以用什么打字来获得它

作为解决方案,我可以有一个简单的类,它有一个带有此注释的方法(以及其他方法),并在该类上使用反射方法来获得java.lang.annation.annotation,但这似乎很奇怪。。

谢谢!

注释的实例只存在于带注释的类型/方法中。这就是你如何获得

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);

假设您有一些类MyClass,它用RequiresPermissions注释进行了注释:

@RequiresPermissions("something")
public class MyClass {
    // ...
}

如果您想在程序中查看MyClass的注释值,可以执行以下操作:

RequiresPermissions anno = MyClass.class.getAnnotation(RequiresPermissions.class);
System.out.println(anno.value());

(我不知道RequiresPermissions注释有什么属性;您可以在anno对象上调用它们来获取值)。

属性.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;

相关内容

  • 没有找到相关文章