为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2022-04-28 15:43:10
我正在寻找一种方法来返回一个扩展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 中实现这一点的最佳方法。任何想法表示赞赏。
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

供应商在这里很好:


public static <T extends SomeBaseClass> T build(Supplier<T> supplier){ 

   return supplier.get(); 

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


并使用它,例如:


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


查看完整回答
反对 回复 2022-04-28
?
UYOU

TA贡献1878条经验 获得超4个赞

您必须通过要创建的实际课程。T变为Object运行时,因此 JVM 不知道它应该创建什么类型(只是假设)


public static <T extends SomeBaseClass> T build(Class<T>clazz) {                             

         return clazz.newInstance();

    }

通话会像您期望的那样简单


SomeClass anInstanceOfSomeClass = Builder.build(SomeClass.class);

坚持 Java 的命名约定(ClassName 和 methodName)


查看完整回答
反对 回复 2022-04-28
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信