首先看一个简单的代码
class Demo { class A{} public Demo(){ A[] as=new A[10]; } }
创建一个内部类的数组,编译通过。
但当定义Demo时声明一个泛型,编译失败
package example; class Demo<T> { class A{} public Demo(){ // A[] as=new A[10]; 无法创建 Demo<T>.A 的通用数组 } }
这个错误让人困扰,并未创建所谓泛型数组,为何会编译失败。
究其原因,是因为内部类可以直接使用外部类的T类型参数,可能产生泛型数组。
package example; class Demo<T> { class A{ T foo; } public Demo(){ //A[] as=new A[10]; 无法创建 Demo<T>.A 的通用数组 } }
这样就可能产生泛型数组了,违反了java原则。