首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JDK6下相互引用类型参数编译,但不是7?

在JDK6下相互引用类型参数编译,但不是7?
EN

Stack Overflow用户
提问于 2012-04-02 13:52:52
回答 1查看 312关注 0票数 10

下面的代码使用JDK6编译(我尝试了1.6.0_24)

代码语言:javascript
复制
class XY<A extends XY<A, B>, B extends XY<B, A>> { } 

但是在JDK7 (例如1.7.0)下编译,我得到了以下错误:

代码语言:javascript
复制
XY.java:1: error: type argument B is not within bounds of type-variable A
class XY<A extends XY<A, B>, B extends XY<B, A>> {
                                      ^
  where B,A are type-variables:
    B extends XY<B,A> declared in class XY
    A extends XY<A,B> declared in class XY
1 error

有人能指出这是否是有意改变Java的泛型吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-02 17:22:24

这似乎是一个来自OpenJDK的bug,是由类型变量替换中的错误引起的。

当您切换示例的泛型变量时,会出现如下情况:

代码语言:javascript
复制
class XY<A extends XY<A, B>, B extends XY<B, A>> { } 
class XY<A extends XY<B, A>, B extends XY<A, B>> { } 

它不会出现在以下内容中:

代码语言:javascript
复制
class XY<A extends XY<A, B>, B extends XY<A, B>> { } 
class XY<A extends XY<B, A>, B extends XY<B, A>> { } 

您可以在这里看到另一个例子:http://old.nabble.com/Apparent-generics-compilation-bug-new-to-Java-1.7-td33378164.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9977760

复制
相关文章

相似问题

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