创建Class变量的对象

时间:2014-11-12 09:18:08

标签: java

我有Class个对象,clazz。我想制作那个类型的对象。

即。 Class clazz = MTable.getClass(tableName);

变量clazz可以是MOrder.classMInventory.classMSalary.class类型。 现在我想为一个实例创建MOrder的对象。 如果不将clazzMOrder.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

3 个答案:

答案 0 :(得分:3)

尝试:

Object object = clazz.newInstance()

答案 1 :(得分:3)

Object object = clazz.newInstance();

将根据clazz的值创建实例。

如果要将对象存储在MOrder变量中,则必须先检查其类型:

MOrder order = null;
if (object instanceof MOrder) {
    order = (MOrder) order;
}

您无法避免对类型进行测试,因为正如您所说,clazz可能包含不同的类实例。

如果所有类都实现了DocAction接口,则可以执行以下操作:

Class<? extends DocAction> clazz = ...
DocAction instance = clazz.newInstace();

这至少可以为您提供接口类型的参考。如果要将实例存储在更具体的变量中,您仍需要检查特定类型。

答案 2 :(得分:1)

@Saj,类对象不是由类继承的,因此MOrder.class或MInventory.class不能是Class对象的类型。所有对象都继承自Object类,甚至Class对象也继承自Object类。所以,你的逻辑似乎不正确。用其他方式思考,了解要创建哪种类型的对象。