Raf*_*ter 17 java receiver java-8 type-annotation
我正在用一个定义带注释的接收器类型的方法来查看一个相当简单的类:
class Foo<T> {
void foo(Foo<@Bar T> this) {}
}
Run Code Online (Sandbox Code Playgroud)
我现在想访问接收器类型参数的类型注释,@Bar但Java反射API在访问接收器时返回带注释的原始类型:
assert Foo.class.getDeclaredMethod("foo")
.getAnnotatedReceiverType()
instanceof AnnotatedParameterizedType;
Run Code Online (Sandbox Code Playgroud)
断言失败,因为返回的带注释的类型作为原始类型返回Foo.这是故意的吗?@Bar当访问AnnotatedType返回的实现的私有属性时,我仍然可以找到注释.
我正在运行最新版本的Java 8.
这是一个已知的错误JDK-8058220.但是,问题看起来更深.
如果不更改类文件格式和相应的规范更新,则无法轻松修复.目前,类文件不包含区分接收器参数和常规参数所需的信息(参见JDK-8062582).
事实证明这是一个简单的错误。我首先想到的是,这是链接问题的隐含,但类型注释与此无关。在 Java 运行时的当前实现中,类型注释的测试很差。当我深入研究这个问题时,我发现了很多问题:
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |