使用匿名内部 class 遍历二叉搜索树

Use of anonymous inner class in traversing a binary search tree

更新:如何在不修改界面的情况下将持续时间相加?

我无法访问匿名内部实例的方法 class。我收到 sum.totalTime() 调用的编译时错误 -- "the method totalTime() is undefined for the type Traverser"

我有一个 Traverser 界面。

interface Traverser<E> {
    public void visit(E x);
}

我想使用该界面来添加 SongEntry 对象的持续时间属性。因此,我实例化了一个匿名内部 class,每个 visit() 调用都增加了一个 totalTime 属性,并为该属性增加了一个 getter。

在另一个class中,我有以下代码:

Traverser<SongEntry> sum = new Traverser<SongEntry>() {
  private int totalTime;

  public void visit(SongEntry song) {
    totalTime += song.getDuration();
  }

  public int totalTime() {
    return totalTime;
  }
};

myPlayList.traverse(sum);

int total = sum.totalTime(); // causes compile-time error "the method totalTime() is undefined for the type Traverser<SongEntry>"

myPlayList 是一个二进制搜索 ADT,它在每个元素上运行传递的仿函数的 visit() 方法。

由于 sumTraverser 类型,您只能调用在 Traverser 接口中声明的方法。您的选择是:

  • 只需在界面中添加功能public int totalTime(); 定义。
  • 使用所需的函数声明创建第二个接口 扩展 Traverser.
  • 创建一个非匿名的内部 class 并实现 Traverser.