我对一个静态的、直接填充的类文件数组有一个小问题,它继承自一个超类
public static Class<SuperClass> classes= new Class<SuperClass>[]{
ChildClass.class
}
似乎是不可能的。Intellij 说,它需要 Superclass.class,而不是 ChildClass.class。
为什么这是不可能的?谢谢
我对一个静态的、直接填充的类文件数组有一个小问题,它继承自一个超类
public static Class<SuperClass> classes= new Class<SuperClass>[]{
ChildClass.class
}
似乎是不可能的。Intellij 说,它需要 Superclass.class,而不是 ChildClass.class。
为什么这是不可能的?谢谢
数组和泛型不能混用。
Xx<Derived>
也不能分配一个类型Xx<Base>
(请参阅本网站上的无数问题)。
您可能想要:
private static final Class<? extends SuperClass> clazz = ChildClass.class;
另一种方式:
private static final Class<? super ChildClass> clazz = SuperClass.class;
或使用适当的集合:
private static final Set<? extends SuperClass> classes =
unmodifiableSet(singleton(
ChildClass.class
));
可变静力学,即使不是public
,也是一个非常糟糕的主意。
这是不可能的,因为我们使用=
(equal) 来表示左右手边是相同的。在这里,您将一个数组分配给一个非数组变量。