Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中动态创建类型为的实例_Java_Dynamic Typing - Fatal编程技术网

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

如何在Java中动态创建类型为的实例,java,dynamic-typing,Java,Dynamic Typing,在我的Java应用程序中,我有一个方法 public <T extends Transaction> boolean appendTransaction(T transaction) { ... } 或多或少,除了那是邪恶的: 请注意,此方法传播nullary构造函数引发的任何异常,包括选中的异常。使用此方法可以有效地绕过编译时异常检查,否则将由编译器执行 而是使用,它用一个.包装构造函数中抛出的异常。我认为您应该使用类型为T的工厂接口,这样您就可以在用户方法上强制创建实例接

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

public <T extends Transaction> boolean appendTransaction(T transaction) {
   ...
}
或多或少,除了那是邪恶的:

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


而是使用,它用一个.

包装构造函数中抛出的异常。我认为您应该使用类型为T的工厂接口,这样您就可以在用户方法上强制创建实例接口

public <T extends Transaction> boolean appendTransaction(
        T transaction, 
        Factory<T> factory) {
    ...
    T newTransaction = factory.createTransaction();
    ...
}
公共事务(
T交易,
工厂(工厂){
...
T newTransaction=factory.createTransaction();
...
}

比getConstructor()的别名更邪恶。newInstance()?我更新了一个动机。它神奇地重现了默认构造函数抛出的任何异常,甚至是您无法显式捕获的已检查异常(因为
Class.newInstance
没有在其签名中声明它们)。它绝对更干净,更不神奇。
public <T extends Transaction> boolean appendTransaction(
        T transaction, 
        Factory<T> factory) {
    ...
    T newTransaction = factory.createTransaction();
    ...
}