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

Java:将类名传递给函数

Java:将类名传递给函数

潇湘沐 2021-11-24 19:10:43
我有三个非常相似的功能,想要重构。但是,函数使用类中的函数,因此,我想知道是否有办法将类/类名传递给函数?new GenericClass1 = genericClass1;new GenericClass2 = genericClass2;new GenericClass3 = genericClass3;public ReturnsClass1 myFunction1 (){    return genericClass1.functionFromClass(paramter);}public ReturnsClass2 myFunction2 (){    return genericClass2.functionFromClass(paramter);}public ReturnsClass3 myFunction3 (){    return genericClass3.functionFromClass(paramter);}为了说明我想要这样的东西:public ReturnsClass myFunction (classInstance) {    return classInstance.functionFromClass(parameter);}
查看完整描述

2 回答

?
慕的地8271018

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

您可以GenericClass*实现一个通用的泛型接口,其中该方法返回泛型类型参数的实例。


interface GenericInterface<T> {

    T functionName(Object parameter); //change parameter type

}

然后可以通过GenericClass*以下方式扩展:


class GenericClass1 implements GenericInterface<ReturnsClass1> {

    public ReturnsClass1 functionName(Object parameter) {

        ...

    }

}

以同样的方式,GenericClass2将实施GenericInterface<ReturnsClass2>和GenericClass3将实施GenericInterface<ReturnsClass3>。


您的方法将如下所示:


public <T> T myFunction (GenericInterface<T> classInstance) {

    return classInstance.functionName(parameter);

}


查看完整回答
反对 回复 2021-11-24
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您可以尝试使用java.util.function.Function<T, R>.


它可能看起来像这样:


public <R> R myFunction (Function<Object, R> func) {

    return func.apply(parameter);

}

用法:


ReturnClass1 rc1 = myFunction(genericClass1::functionFromClass);

ReturnClass2 rc2 = myFunction(genericClass2::functionFromClass);

这种方法的优点是你不需要你的泛型类来共享一个接口,所有的重构都进入myFunction. 此接口是 Java 8 中引入的功能接口,您可以在 docs 中阅读有关它的更多信息。简单地说,它定义了一个函数,该函数接受一个 type 类型的参数T并返回一个 type 值R。


奇怪的::是一个方法参考


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 268 浏览

添加回答

举报

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