2 回答
TA贡献1815条经验 获得超6个赞
如果我理解正确,您的 dataHolder 界面如下所示:
public interface DataHolder {
void push(ObjectA a);
void push(ObjectB b);
}
在这种情况下,您的循环确实无法从重载方法中受益,因为在编译时,它只知道Stats.
为了实现您的目标,您需要使用访问者模式,并Stats像这样更新您的层次结构:
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
}
}
现在如果你这样做:
new Parser<Stat>().parse(input).accept(dataHandler);
它将使用 propper 重载 push 方法(我没有重写你的循环,因为我不确定我是否正确地使用它,但希望你可以自己应用它)。
TA贡献1836条经验 获得超3个赞
对我来说听起来很合理。去尝试一下。
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.
}
添加回答
举报