Java:将类名传递给函数

Java:将类名传递给函数,java,function,class,refactoring,Java,Function,Class,Refactoring,我有三个非常相似的函数,想要重构。但是,函数使用来自类的函数,因此,我想知道是否有方法将类/类名传递给函数 new GenericClass1 = genericClass1; new GenericClass2 = genericClass2; new GenericClass3 = genericClass3; public ReturnsClass1 myFunction1 (){ return genericClass1.functionFromClass(paramter);

我有三个非常相似的函数,想要重构。但是,函数使用来自类的函数,因此,我想知道是否有方法将类/类名传递给函数

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);
}
public <T> T myFunction (GenericInterface<T> classInstance) {
    return classInstance.functionName(parameter);
}
public <R> R myFunction (Function<Object, R> func) {
    return func.apply(parameter);
}

您可以使
GenericClass*
实现一个公共泛型接口,在该接口中,该方法返回泛型类型参数的实例

interface GenericInterface<T> {
    T functionName(Object parameter); //change parameter type
}
同样,
GenericClass2
将实现
GenericInterface
GenericClass3
将实现
GenericInterface

然后,您的方法将如下所示:

public ReturnsClass myFunction (classInstance) {
    return classInstance.functionFromClass(parameter);
}
public <T> T myFunction (GenericInterface<T> classInstance) {
    return classInstance.functionName(parameter);
}
public <R> R myFunction (Function<Object, R> func) {
    return func.apply(parameter);
}
public T myFunction(通用接口classInstance){
返回classInstance.functionName(参数);
}

您可以使
GenericClass*
实现一个公共泛型接口,在该接口中,方法返回泛型类型参数的实例

interface GenericInterface<T> {
    T functionName(Object parameter); //change parameter type
}
同样,
GenericClass2
将实现
GenericInterface
GenericClass3
将实现
GenericInterface

然后,您的方法将如下所示:

public ReturnsClass myFunction (classInstance) {
    return classInstance.functionFromClass(parameter);
}
public <T> T myFunction (GenericInterface<T> classInstance) {
    return classInstance.functionName(parameter);
}
public <R> R myFunction (Function<Object, R> func) {
    return func.apply(parameter);
}
public T myFunction(通用接口classInstance){
返回classInstance.functionName(参数);
}

您可以尝试使用
java.util.function.function

可能是这样的:

public ReturnsClass myFunction (classInstance) {
    return classInstance.functionFromClass(parameter);
}
public <T> T myFunction (GenericInterface<T> classInstance) {
    return classInstance.functionName(parameter);
}
public <R> R myFunction (Function<Object, R> func) {
    return func.apply(parameter);
}
这种方法的优点是不需要泛型类来共享接口,所有重构都进入
myFunction
。这个接口是Java8中引入的一个功能接口,您可以阅读更多关于它的内容。简单地说,它定义了一个函数,该函数接受类型为
T
的单个图形,并返回类型为
R
的值


而且wierd外观的
是一个你可以尝试使用
java.util.function.function

可能是这样的:

public ReturnsClass myFunction (classInstance) {
    return classInstance.functionFromClass(parameter);
}
public <T> T myFunction (GenericInterface<T> classInstance) {
    return classInstance.functionName(parameter);
}
public <R> R myFunction (Function<Object, R> func) {
    return func.apply(parameter);
}
这种方法的优点是不需要泛型类来共享接口,所有重构都进入
myFunction
。这个接口是Java8中引入的一个功能接口,您可以阅读更多关于它的内容。简单地说,它定义了一个函数,该函数接受类型为
T
的单个图形,并返回类型为
R
的值


wierd looking
是一个

使类GenericClass1、GenericClass2和GenericClass3实现相同的接口,并且您的函数接受此Iterface类型的参数。您的问题问得不好,因为您的问题似乎包含了自己的答案。你的实际问题是什么?一些更完整的示例代码可能会有很大帮助。我想将类的名称传递给函数,并在函数中使用该类。我的“解决方案”接近我想要的,但代码不起作用。@ArneO.Ose:我也包括了一个答案,请看一看。也许你的方法可以接受
java.util.function.function
并将每个泛型类的函数绑定到它。然后,在内部调用
apply
并使用该值。这就是如何避免实现接口使类GenericClass1、GenericClass2和GenericClass3实现相同的接口,并且您的函数接受此Iterface类型的参数。您的问题问得不好,因为您的问题似乎包含自己的答案。你的实际问题是什么?一些更完整的示例代码可能会有很大帮助。我想将类的名称传递给函数,并在函数中使用该类。我的“解决方案”接近我想要的,但代码不起作用。@ArneO.Ose:我也包括了一个答案,请看一看。也许你的方法可以接受
java.util.function.function
并将每个泛型类的函数绑定到它。然后,在内部调用
apply
并使用该值。这就是你如何避免实现界面谢谢你的回答,但是,我希望没有界面也能做到这一点谢谢你的回答,但是,我希望没有界面也能做到这一点