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
并使用该值。这就是你如何避免实现界面谢谢你的回答,但是,我希望没有界面也能做到这一点谢谢你的回答,但是,我希望没有界面也能做到这一点