2 回答
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);
}
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。
奇怪的::是一个方法参考
添加回答
举报