在方法中使用 getter 作为参数

Use getter as parameter in method

我有多个不同的 classes Class1、Class2、Class3。 每个 class 都有不同的变量和吸气剂。

public class Class1 {
 private String var1_1;
 private String var1_2;
 private String var1_3;

 public String getVar1_1() { return var1_1;}
 public String getVar1_2() { return var1_2;}
 public String getVar1_3() { return var1_3;}
}

public class Class2 {
 private String var2_1;
 private String var2_2;
 private String var2_3;

 public String getVar2_1() { return var2_1;}
 public String getVar2_2() { return var2_2;}
 public String getVar2_3() { return var2_3;}
}

public class Class3 {
 private String var3_1;
 private String var3_2;
 private String var3_3;

 public String getVar3_1() { return var3_1;}
 public String getVar3_2() { return var3_2;}
 public String getVar3_3() { return var3_3;}
}

如何编写将对象列表和 getter(函数)作为方法参数的方法? 例如:

List<Class1> list1 = //doesn't matter
List<Class2> list2 = //doesn't matter
List<Class3> list3 = //doesn't matter
generateRows(list1, Class1::getVar1_1, Class1::getVar1_3);
generateRows(list2, Class2::getVar2_1, Class2::getVar2_2, Class2::getVar2_3);
generateRows(list3, Class3::getVar3_1, Class3::getVar3_2);

方法

public void generateRows(List<T> list, /*???Something???*/... getters) {
 for(T object: list) {
  /*How to use getters to print?*/
  /*System.out.println(obj.firtsGetter())*/
 }
}

我应该写什么而不是???Something???。像 Function<T, String>Consumer<T> 这样的东西?我如何在方法中使用吸气剂?

您需要将方法调用包装在一个 Function. A Consumer, or another FunctionalInterface 中,这可能也能解决问题,具体取决于您的需要。

然后你需要让你的方法接受这个函数的可变参数。

  public static <T> void generateRows(List<T> list, Function<T, String>... getters) {
    for (T object : list) {
      for (Function<T, String> getter : getters) {
        System.out.println(getter.apply(object));
      }
    }
  }

函数将接受类型为 T 和 return 和 String 的参数。 T 可以是任何东西 - Class1Class2 等,只要你可以 return 来自这个对象的字符串 - 这意味着有一个 getter 方法returning String 你的情况。

首先你可以定义一个接口,例如:

 interface  Get{
    String getVar1();
     String getVar2();
     String getVar3();
 }

第二 类 实施它:

 class Class2 implements Get{
    private String var2_1;
    private String var2_2;
    private String var2_3;

    public String getVar1() { return var2_1;}
    public String getVar2() { return var2_2;}
    public String getVar3() { return var2_3;}
}

第三名:

   public void generateRows(List<T> list, Get ...getters) {
        for(T object: list) {
            /*How to use getters to print?*/
            /*System.out.println(obj.firtsGetter())*/
        }
    }