用两种不同的返回类型在Java中实现访客模式

Gia*_*ear 0 java visitor-pattern

我试图在具有对象具有不同返回类型(int和void)的方法的对象结构中实现Java的Visitor模式(家庭运动,对不起)。

ConcreteVisitor(即CostAss)返回int,第二个ConcreteVisitor(即drawCosts)返回void(即成本的打印)。

在此处输入图片说明

我有问题要了解如何实施此问题。我不允许在Employee接口中创建两个accept方法(一个int一个void)

在此处输入图片说明

And*_*lko 5

从Java的角度来看,这些方法是相同的,因为返回类型不是方法签名的一部分。

该图不适用于Java。但是,可以使用泛型来解决它。

interface Employee<T> {
  Optional<T> accept(Visitor visitor);
}

class Assistant implements Employee<Integer> {
  @Override
  public Optional<Integer> accept(Visitor visitor) {
    return Optional.of(100);
  }
}

class Manager implements Employee<Void> {
  @Override
  public Optional<Void> accept(Visitor visitor) {
    return Optional.empty();
  }
}
Run Code Online (Sandbox Code Playgroud)

我不是这种想法的一个巨大的支持者,我只是想分享的方式可以做到。