我有这样一个东西:
public class Enclosing<T extends Comparable<T>> {
// non-relevant code snipped
public class Inner {
private T value;
public Inner(T t) {
value = t;
}
}
}
一切编译完成,世界和谐美好。然而,每当我尝试像下面这样创建Enclosing.Inner
的实例时,我都无法成功:
new Enclosing<Integer>.Inner(5);
以下错误发生:
无法使用参数化的复合名称分配成员类型 Enclosing.Inner;请使用其简单名称和类型为 Enclosing 的封装实例。
需要注意的是,因为内部类包含类型为 T 的字段,所以我不能将其设置为静态。
如何解决这个问题呢?
static
,因为它包含一个类型为T
的字段”:这更像是一个理由来使内部类成为泛型,使用与外部类相同的边界,而不是使内部类非静态。(并不是说你的内部类应该是静态的。这取决于你的整体设计,而不是这个细节。) - ruakh