【发布时间】:2014-10-04 10:07:23
【问题描述】:
我正在尝试在 Java 中创建一个类数组。不是对象,而是类。目前我有一个 MyBaseClass 类,并从中扩展了三个类 MyClass1、MyClass2 和 MyClass3。我将这些类存储到一个静态数组中,如下所示:
private static MyBaseClass[] classes = {
new MyClass1(),
new MyClass2(),
new MyClass3()
};
public static MyBaseClass getInstanceOfClass(int index) {
return classes[index];
}
然后我使用这样的方法:
try {
MyBaseClass obj = getInstanceOfClass(index).getClass().newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
现在我想知道是否可以以更简单的方式做到这一点。如果我可以创建一个类数组,我也许可以逃避 getInstanceOfClass() 方法和一些可能的异常。我试过这样做:
private static Class<MyBaseClass>[] classes = {
MyClass1.class,
MyClass2.class,
MyClass3.class
};
但这给了我一个错误“不兼容的类型”,因为 MyClass1 不等于 MyBaseClass。有趣的是,这似乎可行:
private static Class<?>[] classes = {
new MyClass1().getClass(),
new MyClass2().getClass(),
new MyClass3().getClass()
};
但这种想法很可怕,我的调试器甚至标记了它。那么,有没有更好的方法呢?
编辑:
这行得通:
private static Class<?>[] classes = {
MyClass1.class,
MyClass2.class,
MyClass3.class
};
但是getInstanceOfClass(index).newInstance(); 的结果是一个对象,所以我必须进行类型转换。我不确定在这种情况下是否安全......
【问题讨论】:
-
我不认为你可以创建泛型类型的数组,因为类型擦除
-
这其中最令人不安的是,至少Android Studio 不会将
Class<?>[]或Class<MyBaseClass>[]标记为错误。但是Class<? extends MyBaseClass>[]被标记了。
标签: java arrays class object instance