java - 静态助手中的通用类型工厂

标签 java generics

我正在寻找一种方法来返回一个扩展了 abstract 的类型的新实例。 Java 中的类,理想情况下没有来自静态方法的反射。

所以我希望能够调用:

SomeClass anInstanceOfSomeClass = Builder.build<SomeClass>()

我希望我能做这样的事情:

public class Builder {

    public static <T extends SomeBaseClass> T build() {                             
        return new T(); // cannot instantiate type T            
    }

}

我看过几个使用 Supplier 的例子但它们往往基于非静态,使用通用类而不是方法和/或需要传入 ctor作为语法上似乎有点复杂的参数。

感觉这应该很简单,但来自 C# 我不太熟悉在 Java 中实现此目的的最佳方法。任何想法表示赞赏。

最佳答案

供应商在这里很好:

public static <T extends SomeBaseClass> T build(Supplier<T> supplier){ 
   return supplier.get(); 
} 

它避免了反射和异常处理。

并使用它,例如:

SomeClass anInstanceOfSomeClass = Builder.build(SomeClass::new); 

关于java - 静态助手中的通用类型工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54142464/

相关文章:

swift - 如何从具有通用返回类型和 where 子句的方法返回值

java - 来自 java.util.zip.Inflater.init(Native Method) 的奇怪 java.lang.OutOfMemoryError

java - 澄清 Java Swing 中组件类的继承层次结构?

java - 比较器二 compare Methods with Reflection

generics - 将字节数组反序列化为名称为 String 的类

swift - 条件协议(protocol)一致性?

java - 什么是原始类型,为什么我们不应该使用它呢?

java - Canvas 中的 Thread.sleep

java - 更改同一对象的多个属性

java - 为什么短类型参数的 Integer.toBinaryString 结果包括 32 位?