使用getter作为方法中的参数



我有多个不同的类Class1、Class2和Class3。每个类都有不同的变量和getter。

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>?如何在方法中使用getter?

您需要将方法调用包装在Function中。根据您的需要,消费者或另一个FunctionalInterface也可以做到这一点。

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

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的参数,并返回一个StringT可以是任何东西——Class1Class2等,只要你能从这个对象返回一个字符串——这意味着在你的情况下有一个返回String的getter方法。

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

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())*/
}
}

相关内容

  • 没有找到相关文章

最新更新