我正在寻找一种方法来返回一个扩展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);
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)
添加回答
举报
0/150
提交
取消