【发布时间】:2018-03-12 14:00:14
【问题描述】:
我有一个关于嵌套类中的泛型类型的问题。
如果我有一个类 (Class1),它采用 E 类型,并且还有一个内部类 (Class2),我也想采用 E 类型,它应该与在所有情况下都是 Class1 的 E。 Class2 是一个私有内部类,所以它只会被 Class1 的实例使用;这意味着它永远不会有任何其他 E。
但是,我从这段代码中得到了一堆警告;
首先,在 Class1 构造函数中创建 Class2 数组时,我得到“类型安全:类型 Class1.Class2[] 的表达式需要未经检查的转换以符合 Class1.Class2[]”。
然后我还在 Class2 的类声明中得到“类型参数 E 隐藏类型 E”(私有类 Class2)
同时,虽然我可以在构造函数之外声明数组变量时添加类型,但在创建数组时却不能这样做(我得到“Cannot create a generic array of Class1.Class2 em>”如果我尝试)。
如果我想要不产生任何警告的代码,我不太明白我应该怎么做。我该如何摆脱上面提到的两个警告?
/**
* @author you-know-who
* @param <E>
*/
public class Class1<E> {
public final E main;
public final Class2<E>[] rest;
public Class1(E main, E[] rest) {
this.main = main;
this.rest = new Class2[rest.length];
int index = 0;
for (E e : rest) {
this.rest[index] = new Class2<E>(e);
index++;
}
}
/**
* @author you-know-who
* @param <E>
*/
private class Class2<E> {
public final E e;
public Class2(E e) {
this.e = e;
}
}
}
【问题讨论】:
-
Class2 可以使用 E 而不是泛型。技术上是
Class1<E>.Class2 -
泛型和数组不混合,由于具体化。使用列表或集合,而不是数组。
标签: java generics compiler-warnings inner-classes unchecked