Java 由封闭类类型变量绑定的内部类类型参数

Java 由封闭类类型变量绑定的内部类类型参数,java,generics,Java,Generics,有没有办法将封闭类声明的类型变量用作内部类中声明的类型变量的绑定 class Test<E> { class Inner<T extends E> {} <T extends E> void doStuff(T arg) {} public static void main(String[] args) { new Test<Number>().doStuff(new Integer(0)); // works fin

有没有办法将封闭类声明的类型变量用作内部类中声明的类型变量的绑定

class Test<E> {
   class Inner<T extends E> {}
   <T extends E> void doStuff(T arg) {}
   public static void main(String[] args) {
      new Test<Number>().doStuff(new Integer(0)); // works fine, as expected
      new Test<Number>().new Inner<Integer>(); // won't compile
   }
}
类测试{
类内部{}
void doStuff(T arg){}
公共静态void main(字符串[]args){
new Test().doStuff(新整数(0));//工作正常,如预期
新建测试()。新建内部();//将不编译
}
}
javac给出了以下错误:

Test.java:6: type parameter java.lang.Integer is not within its bound
             new Test<Number>().new Inner<Integer>();
                                             ^
Test.java:6:类型参数java.lang.Integer不在其范围内
新测试().新内部();
^
我找不到满足编译器要求的任何类型组合。
internal
声明的类型参数
T
doStuff
之间有什么区别?为什么一个工作,另一个不工作

我不是在寻找替代方案,我只是想更好地了解该语言的工作原理。

描述

编译器无法接受此程序:

但是它失败了,错误出现在Java 6的问题中:

C:\workspace\Sandbox\src>"%JAVA_HOME%\bin\javac.exe" -version
javac 1.7.0-ea
C:\workspace\Sandbox\src>"%JAVA_HOME%\bin\javac.exe" -version
javac 1.6.0_17

这个例子对我来说编译并运行得很好。@ILMTitan您使用的编译器是什么?在JavaC1.6.0_21上失败。@axtavt:这对我来说开始像个bug了。好吧,jk,这显然是JavaC1.6中的bug,当然不会影响Eclipse的编译器。见下面伯特的答案。@Charlatan-我就是这样读的。我还确认了我的系统-请参阅我的编辑。
Number <: Object
Integer <: [Number/T]T = Number
Integer <: T 
C:\workspace\Sandbox\src>"%JAVA_HOME%\bin\javac.exe" -version
javac 1.7.0-ea
C:\workspace\Sandbox\src>"%JAVA_HOME%\bin\javac.exe" -version
javac 1.6.0_17