Java:错误:类不是抽象的,也不会覆盖抽象方法accept(Visitor)。在实施访客时

时间:2016-12-08 01:17:02

标签: java design-patterns compiler-errors visitor-pattern

我正在尝试实现一个访问者设计模式,我有一个类结构,在我想要访问的操作之间有很多类和变量返回类型。

尽管严格遵循访问者模式,但我收到了很多编译错误Classname is not abstract and does not override abstract method accept(Visitor) in Visitable

例如我的班级添加

public class Add extends BinaryExpression implements Visitable {
 /* content of the class supressed */
   public Integer accept(Visitor v) {
      return v.visit(this); 
    }        
}

对于Add类的访问者,它总是返回int,但是其他类的访问者将返回同一类中的其他类型甚至变量类型。

在我的可访问界面上我有(使用泛型类型作为变量返回类型。)

public interface Visitable<T> {
  public T accept(Visitor v);}

在我的访客界面上我有

public interface Visitor<T> {
  public T visit(Add c);

我的评估员访客

public class Evaluator<T> implements Visitor{ 
  public Integer visitAdd(Add c){
    return c.first().accept(this) + c.second().accept(this);
  }

完整错误的屏幕截图 error

更新了错误屏幕 updated error screen

1 个答案:

答案 0 :(得分:2)

错误是因为与int不同,Object是原始而非Integer类型。换一种说法, 泛型类型只接受对象引用类型,但不接受基元,因此将accept(Visitor v)方法返回类型更改为Integer,以便它将编译:

public class Add extends BinaryExpression implements Visitable {
   public Integer accept(Visitor v) {
      return v.visit(this); 
    }        
}