首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类中引用java.lang.annotation.Annotation?

从类中引用java.lang.annotation.Annotation?
EN

Stack Overflow用户
提问于 2014-04-28 14:46:08
回答 3查看 489关注 0票数 2

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

注释本身看起来如下(来自一个框架):

代码语言:javascript
复制
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresPermissions {
    ...snip...
}

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

代码语言:javascript
复制
Annotation requiresPermissionAnnotation = RequiresPermissions.class;

在我的一生中,我无法弄清楚该怎么做,或者我能用什么打字来得到它。

作为一项工作,我可以有一个简单的类,它有一个带有这个注释的方法(和其他类),并且使用类上的反射方法来获得java.lang.annotation.Annotation,但是这看起来很奇怪。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-28 14:47:25

注释的实例只存在于带注释的类型/方法。这就是你能得到它的方法

代码语言:javascript
复制
Annotation requiresPermissionAnnotation = SomeAnnotatedClass.class.getAnnotation(RequiresPermissions.class);

您可以转换为RequiresPermissions来访问任何属性。

代码语言:javascript
复制
RequiresPermissions requiresPermissions = (RequiresPermissions) requiresPermissionAnnotation;

或者直接得到

代码语言:javascript
复制
RequiresPermissions requiresPermissions = SomeAnnotatedClass.class.getAnnotation(RequiresPermissions.class);

为了一种方法

代码语言:javascript
复制
Annotation requiresPermissionAnnotation = someMethodInstance.getAnnotation(RequiresPermissions.class);
票数 1
EN

Stack Overflow用户

发布于 2014-04-28 14:55:13

比方说,您有一些类MyClass,它使用RequiresPermissions注释进行注释:

代码语言:javascript
复制
@RequiresPermissions("something")
public class MyClass {
    // ...
}

如果您想在程序中看到MyClass注释的值,可以这样做:

代码语言:javascript
复制
RequiresPermissions anno = MyClass.class.getAnnotation(RequiresPermissions.class);

System.out.println(anno.value());

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

票数 1
EN

Stack Overflow用户

发布于 2014-04-28 14:59:02

属性.class返回一个Class对象,您必须将其分配给任何超级类型的Class。它不是注释的实例,所以尝试将它分配给Annotation是行不通的。为了保持对注释类型的引用,您有几个选项:

代码语言:javascript
复制
// 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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23344165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档