采用唯一参数和 returns 个唯一参数 Java 的通用方法
Generic Method That takes unique parameter and returns unique parameters Java
我有一个要求,在函数中使用不同的参数和 returns 独特的对象。所有这些函数执行相同的操作。
即。
public returnObject1 myfunction( paramObject1 a, int a) {
returnObject1 = new returnObject1();
returnObject1.a = paramObject1.a;
return returnObject1;
}
public returnOject2 myfunction( paramObject2 a, int a){
returnObject2 = new returnObject2();
returnObject2.a = paramObject2.a;
return returnObject2;
}
正如您在上面看到的,这两个函数执行相同的任务,但它们采用不同的参数作为输入和 return 不同的对象。
我想尽量减少编写执行相同任务的不同函数。
是否可以为此编写一个通用方法,可以根据对函数的调用来替换参数?
paramObject 和 returnObject 基本上是两个具有不同变量的 类。他们彼此没有关系。
我的 objective 是我不想做函数重载,因为函数做几乎相同的工作。我想要一个可以处理不同输入和不同 return 输出的函数。
我的目标是做这样的事情(如果可能的话):
public static < E > myfunction( T a, int a ) {
// do work
}
return类型E和输入T可以保持变化。
您可以使用第 3 种 apply
方法来删除代码重复,在此方法中,您将创建和初始化与 apply
方法分开。并且不关心使用哪种类型的 T
。例如:
returnObject1 myfunction(paramObject1 a, int b) {
return apply(returnObject1::new, b, value -> {
//uses paramObject1
//populates returnObject1
//for example:
value.foo = a.bar;
});
}
returnOject2 myfunction(paramObject2 a, int b) {
return apply(returnOject2::new, b, value -> {
//uses paramObject2
//populates returnObject2
//for example:
value.key = a.value;
});
}
<T> T apply(Supplier<T> factory, int b, Consumer<T> initializer) {
T value = factory.get();
initializer.accept(value);
//does work ...
return value;
}
注意 2 myfunction
是可选的,你可以从你的源代码中删除它们,直接调用apply
方法,例如:
paramObject2 a = ...;
returnObject2 result = apply(returnOject2::new, 2, value -> {
//for example:
value.key = a.value;
});
制作 interface Foo
并在 paramObject1
和 paramObject2
class 中实现此 interface
。现在你的方法应该是这样的:
public Foo myFunction(Foo foo, int a){
//Rest of the code.
return foo;
}
我有一个要求,在函数中使用不同的参数和 returns 独特的对象。所有这些函数执行相同的操作。
即。
public returnObject1 myfunction( paramObject1 a, int a) {
returnObject1 = new returnObject1();
returnObject1.a = paramObject1.a;
return returnObject1;
}
public returnOject2 myfunction( paramObject2 a, int a){
returnObject2 = new returnObject2();
returnObject2.a = paramObject2.a;
return returnObject2;
}
正如您在上面看到的,这两个函数执行相同的任务,但它们采用不同的参数作为输入和 return 不同的对象。
我想尽量减少编写执行相同任务的不同函数。
是否可以为此编写一个通用方法,可以根据对函数的调用来替换参数?
paramObject 和 returnObject 基本上是两个具有不同变量的 类。他们彼此没有关系。
我的 objective 是我不想做函数重载,因为函数做几乎相同的工作。我想要一个可以处理不同输入和不同 return 输出的函数。
我的目标是做这样的事情(如果可能的话):
public static < E > myfunction( T a, int a ) {
// do work
}
return类型E和输入T可以保持变化。
您可以使用第 3 种 apply
方法来删除代码重复,在此方法中,您将创建和初始化与 apply
方法分开。并且不关心使用哪种类型的 T
。例如:
returnObject1 myfunction(paramObject1 a, int b) {
return apply(returnObject1::new, b, value -> {
//uses paramObject1
//populates returnObject1
//for example:
value.foo = a.bar;
});
}
returnOject2 myfunction(paramObject2 a, int b) {
return apply(returnOject2::new, b, value -> {
//uses paramObject2
//populates returnObject2
//for example:
value.key = a.value;
});
}
<T> T apply(Supplier<T> factory, int b, Consumer<T> initializer) {
T value = factory.get();
initializer.accept(value);
//does work ...
return value;
}
注意 2 myfunction
是可选的,你可以从你的源代码中删除它们,直接调用apply
方法,例如:
paramObject2 a = ...;
returnObject2 result = apply(returnOject2::new, 2, value -> {
//for example:
value.key = a.value;
});
制作 interface Foo
并在 paramObject1
和 paramObject2
class 中实现此 interface
。现在你的方法应该是这样的:
public Foo myFunction(Foo foo, int a){
//Rest of the code.
return foo;
}