Java指定子类构造函数签名

标签 java inheritance interface abstract-class

我想创建一个方法来构造作为参数接收的类的对象,非常类似于以下方法:

public static <T extends MyAbstractClass> T makeObject(Class<T> c){
    ObjectReceivedFromService orfs = getObjectFromService();
    Constructor<T> constr = c.getConstructor(ObjectReceivedFromService.class);
    return constr.newInstance(orfs);
}

有没有办法确保这个特定的构造函数在编译时存在? 如果可能的话,我还想使用接口(interface)而不是抽象类。

谢谢

最佳答案

您可能期望的参数不是类,而是构造函数本身:

public static <T extends AnyInterface> T makeObject(Function<ObjectReceivedFromService, T> constructor){
    ObjectReceivedFromService orfs = getObjectFromService();
    return constructor.apply(orfs);
}

调用方法:

makeObject(MyImplementation::new)

最后,通过使用构造函数的方法句柄,任何构造函数都可以用作函数。

关于Java指定子类构造函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274116/

相关文章:

java - 为具有泛型类型的 Java POJO 生成 Avro 架构

java - 使用 Firestore 数据库在 map 上创建多个标记

mysql - 具有单独表和 LEFT JOIN 的继承 : how to know which subclass the record belongs to

java - 允许单位使用设计模式在 Java 中攻击地面、空中或两者的能力的接口(interface)

c# - 接口(interface)成员的属性不起作用

go - 如何将动态类型的数据写入结构中的字段

java - Jung 可视化中的顶点标签颜色

java - 如何将复选框值(选中/未选中)作为jsp中的href参数传递给 Controller

c# - C# 继承层次结构中的对象创建

c++ - 为什么我们需要将函数声明复制并粘贴到继承的类头中