我正在尝试用具有不同返回类型(int和void)的方法的对象结构在Java中实现访问者模式(回家练习,对不起)。
concreteVisitor(即 CostAss )返回 int ,第二个ConcreteVisitor(即 drawCosts )返回 void (即打印费用)。
我有一个问题要了解如何实现此问题。我不允许在Employee接口中创建两个accept方法(一个int一个void)
答案 0 :(得分:5)
从Java的角度来看,这些方法是相同的,因为返回类型不是方法签名的一部分。
该图不适用于Java。但是,可以使用泛型来解决它。
> from google.colab import files
>
> !ls
>
> !rm data.csv
我不是这个想法的大力支持者,我只是想分享 的实现方式。
答案 1 :(得分:0)
您可以创建一个void类型return的方法accept,并且两个具体的访问者都有一个状态,例如
public interface IVisitor {
void visit(Employee employee);
int getStatus();
}
public class VisitPrint implement IVisitor{
public void visit(Employee employee){
//todo
}
public int getStatus(){
throw new IllegalArgumentException("Not supported operation");
}
}
public class VisitSum implement IVisitor{
int status;
public void visit(Employee employee){
//todo
}
public int getStatus(){
return status;
}
}
public interface Employee {
void accept(Visitor visitor);
}
此解决方案可以解决问题并尊重老师的心态。