长话短说:下面的操作为什么在Java中不可行?
public class Test<A<B>> {} // A and B both being generic parameters.
注意:目前我没有特定的使用场景,而只是想了解为什么不允许这样做。
起初,我认为编译器无法确定A
是否可以接受泛型参数,因为在编译A
后,由于类型擦除,泛型将不再存在。
但是,如果是这样的话,我们就无法在任何类上使用泛型。因此,我取出了一个泛型类的字节码,并发现有元数据表明它接受泛型。
public class com.Test<T> {
public com.Test();
Code:
0: aload_0
1: invokespecial #12 // Method java/lang/Object."<init>":()V
4: return
}
我做了一个快速搜索,SO证实编译的代码也将包含与泛型相关的元数据
那么为什么编译器不允许多级泛型?
允许多级泛型会有什么问题吗?这是一种限制吗?还是其他原因?