2

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

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

在这个方法内部,我需要创建一个扩展Transaction的对象T的实例

这样做是否正确

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

2 回答 2

5

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

public <T extends Transaction> boolean appendTransaction(
        T transaction, 
        Factory<T> factory) {
    ...
    T newTransaction = factory.createTransaction();
    ...
}
于 2009-10-09T08:47:08.520 回答
2

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

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

transaction.getClass().getConstructor().newInstance()相反,它使用InvocationTargetException.

于 2009-10-09T08:37:13.330 回答