我有多個不同的類 Class1、Class2、Class3。每個類都有不同的變數和吸氣劑。
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>or的東西Consumer<T>?我怎樣才能在方法中使用getter?
uj5u.com熱心網友回復:
您需要將方法呼叫包裝在Function中。根據您的需要,Consumer或其他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并回傳一個String. T可以是任何東西 - Class1,Class2等,只要你可以從這個物件回傳一個字串 - 這意味著String在你的情況下有一個 getter 方法回傳。
uj5u.com熱心網友回復:
首先,您可以定義一個介面,例如:
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())*/
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/444663.html
