【发布时间】:2016-01-01 22:45:52
【问题描述】:
我正在查看一个相当简单的类,它有一个定义带注释的接收器类型的方法:
class Foo<T> {
void foo(Foo<@Bar T> this) {}
}
我现在想访问接收器类型参数 @Bar 上的类型注释,但 Java 反射 API 在访问接收器时返回带注释的原始类型:
assert Foo.class.getDeclaredMethod("foo")
.getAnnotatedReceiverType()
instanceof AnnotatedParameterizedType;
断言失败,因为返回的带注释的类型返回为原始类型Foo。这是故意的吗?在访问返回的AnnotatedType 实现的私有属性时,我仍然可以找到@Bar 注释。
我正在运行最新版本的 Java 8。
【问题讨论】:
-
您可以查看here 的示例,了解如何获取
AnnotatedParameterizedType,但我不太确定您将如何获得注释。听起来您是在说您正在访问底层实现的私有字段。只是出于好奇,您能否展示一下您将如何做到这一点? -
我应该尝试一下。我立即认为这是由返回错误的类型表示引起的,但正如现在接受的答案所述,这显然是一个错误。
标签: java java-8 receiver type-annotation