Я пытаюсь реализовать шаблон дизайна посетителя, у меня есть структура класса с множеством классов и переменных типов возврата между операцией, которую я хочу делать с посетителем.Java: error: класс не является абстрактным и не отменяет абстрактного метода accept (посетитель). При внедрении Visitor
Я получаю много ошибки компиляции 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, но посетитель для некоторых других классов будет возвращать другие типы или даже тип переменных в пределах одного класс.
На моем Visitable интерфейса я (с помощью универсальных типов для типов переменного возврата.)
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);
}
Снимок экрана с полной ошибкой
Я считаю, что это потому, что вы не питая универсального типа когда вы реализуете посещение. Например, я думаю, что это должно быть _implements Visitable _. –
StaticShadow
Это не решило проблему, к сожалению. Получение точной ошибки – spacing