在方法中使用 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
可以是任何东西 - Class1
、Class2
等,只要你可以 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())*/
}
}
我有多个不同的 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
可以是任何东西 - Class1
、Class2
等,只要你可以 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())*/
}
}