【问题标题】:Java specify subclass constructor signatureJava 指定子类构造函数签名
【发布时间】:2018-03-14 09:35:27
【问题描述】:

我想创建一个方法来构造一个作为参数接收的类的对象,就像下面这样:

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

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

谢谢

【问题讨论】:

  • 你想确保Class&lt;T&gt; 有一个无参数的构造函数吗?
  • 使用接口代替MyAbstractClass应该没有问题。

标签: java inheritance interface abstract-class


【解决方案1】:

你可以期望的不是类而是构造函数本身作为参数:

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

调用方法:

makeObject(MyImplementation::new)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多