我有多个不同的类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
的参数,并返回一个String
。T
可以是任何东西——Class1
、Class2
等,只要你能从这个对象返回一个字符串——这意味着在你的情况下有一个返回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())*/
}
}