如何在Java中动态创建类型的实例

时间:2009-10-09 08:26:26

标签: java dynamic-typing

在我的Java应用程序中,我有方法

public <T extends Transaction> boolean appendTransaction(T transaction) {
   ...
}

在此方法内部,我需要创建一个对象 T 的实例,该实例扩展事务

以这种方式这样做是否正确

T newTransaction = (T) transaction.getClass().newInstance();

2 个答案:

答案 0 :(得分:5)

我认为您应该使用T类型的工厂接口,这样您就可以在方法用户上强制创建实例接口。

public <T extends Transaction> boolean appendTransaction(
        T transaction, 
        Factory<T> factory) {
    ...
    T newTransaction = factory.createTransaction();
    ...
}

答案 1 :(得分:2)

或多或少,除了Class.newInstance是邪恶的:

  

请注意,此方法传播由nullary构造函数抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时异常检查,否则将由编译器执行。

使用transaction.getClass().getConstructor().newInstance()代替,它用InvocationTargetException包装构造函数中抛出的异常。