java - 通用方法采用唯一参数并返回唯一参数Java

标签 java generics java-8 generic-method

我有一个要求,在函数中采用不同的参数并返回唯一的对象。所有这些函数执行相同的操作。

即。

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;
}

正如您在上面看到的,这两个函数执行相同的任务,但它们将不同的参数作为输入并返回不同的对象。

我想尽量减少编写执行相同任务的不同函数。

是否可以为此编写一个通用方法,可以根据对函数的调用来替换参数?

paramObject 和 returnObject 基本上是两个具有不同变量的类。它们彼此无关。

我的目标是我不想做函数重载,因为函数做几乎相同的工作。我想要一个可以处理不同输入和不同返回输出的函数。

我的目标是做这样的事情(如果可能的话):

public static < E > myfunction( T a, int a ) {
  // do work
}

返回类型 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;
});

关于java - 通用方法采用唯一参数并返回唯一参数Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44951581/

相关文章:

java - 将分数值分配给在java范围内的数字

java - 为什么 hprof 文件的大小会比分配给 jvm 的内存量小得多

数组中数组的 Swift 通用扩展

typescript - 如何在 typescript 中为通用参数添加 "newable"约束?

Java Map<String,String[]> 如何对值求和

java - 使用流将字符串转换为两个字符串

java - 为什么 Java 不允许在枚举中覆盖 equals(Object)?

java - 使用 `Error: Could not find or load main class` 运行 jar

c# - 从另一个泛型类添加泛型方法约束

java - 在 Java 8 中,如何从 InputStream 转换为字节数组,并一路用 zip 压缩流?