猿问

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

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


所以我希望能够打电话:


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 中实现这一点的最佳方法。任何想法表示赞赏。


波斯汪
浏览 79回答 2
2回答

holdtom

供应商在这里很好:public static <T extends SomeBaseClass> T build(Supplier<T> supplier){&nbsp;&nbsp; &nbsp;return supplier.get();&nbsp;}&nbsp;它避免了反射和异常处理。并使用它,例如:SomeClass anInstanceOfSomeClass = Builder.build(SomeClass::new);&nbsp;

UYOU

您必须通过要创建的实际课程。T变为Object运行时,因此 JVM 不知道它应该创建什么类型(只是假设)public static <T extends SomeBaseClass> T build(Class<T>clazz) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return clazz.newInstance();&nbsp; &nbsp; }通话会像您期望的那样简单SomeClass anInstanceOfSomeClass = Builder.build(SomeClass.class);坚持 Java 的命名约定(ClassName 和 methodName)
随时随地看视频慕课网APP

相关分类

Java
我要回答