2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果我理解正確,您的 dataHolder 界面如下所示:
public interface DataHolder {
void push(ObjectA a);
void push(ObjectB b);
}
在這種情況下,您的循環(huán)確實(shí)無法從重載方法中受益,因?yàn)樵诰幾g時(shí),它只知道Stats.
為了實(shí)現(xiàn)您的目標(biāo),您需要使用訪問者模式,并Stats像這樣更新您的層次結(jié)構(gòu):
public interface Stats {
void accept(DataHolder holder);
}
public class ObjectA implements Stats {
void accept(DataHolder holder) {
holder.push(this); // this is ObjectA, so push(ObjectA) is used
}
}
public class ObjectB implements Stats {
void accept(DataHolder holder) {
holder.push(this); // this is ObjectB, so push(ObjectB) is used
}
}
現(xiàn)在如果你這樣做:
new Parser<Stat>().parse(input).accept(dataHandler);
它將使用 propper 重載 push 方法(我沒有重寫你的循環(huán),因?yàn)槲也淮_定我是否正確地使用它,但希望你可以自己應(yīng)用它)。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
對(duì)我來說聽起來很合理。去嘗試一下。
String dataToParse = "wklhbglbwbgiwegbuwegbwe";
for(Parser p : parsers){
//The definition of each parser will be called and everything works.
System.out.println(p.parse(dataToParse));
}
你也可以:
public void push(Object obj){
System.out.println(obj.getClass().getCardionalName());
//Or anything else you want to do with it.
}
添加回答
舉報(bào)