我有一个Class
对象clazz
。我要使该类型的对象成为类。
IE Class clazz = MTable.getClass(tableName);
变量clazz
可以是类型的MOrder.class
,MInventory.class
或MSalary.class
。现在,我要MOrder
为实例创建对象。如果没有比较clazz
有MOrder.class
,我怎么可以创建对象MOrder
。Java是否提供任何此类机制?
更新:
我尝试了这个:
Class<? extends DocAction> clazz = (Class<? extends DocAction>) MTable.getClass(re.tableName);
DocAction instance = null;
try {
instance = clazz.newInstance();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
但是抛出一个异常:
java.lang.InstantiationException:org.compiere.model.MOrder
Object object = clazz.newInstance();
会根据的值创建实例clazz
。
如果要将对象存储在MOrder
变量中,则必须首先检查其类型:
MOrder order = null;
if (object instanceof MOrder) {
order = (MOrder) order;
}
正如您所说的那样,您无法避免对该类型的测试,因为它clazz
可能包含不同的Class实例。
如果所有类都实现DocAction接口,则可以执行以下操作:
Class<? extends DocAction> clazz = ...
DocAction instance = clazz.newInstace();
这至少可以为您提供接口类型的参考。如果要将实例存储在更特定的变量中,则仍然需要检查特定的类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句