在遍历二叉搜索树时使用匿名内部类

时间:2015-02-16 01:42:21

标签: java binary-search-tree anonymous-inner-class

更新:如何在不修改界面的情况下最好地累加持续时间?

我无法访问匿名内部类的实例的方法。我得到sum.totalTime()调用的编译时错误 - "方法totalTime()未定义为Traverser"

类型

我有一个Traverser界面。

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

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

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

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()方法。

1 个答案:

答案 0 :(得分:1)

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

  • 只需将函数public int totalTime();添加到界面即可 定义
  • 使用所需的函数声明创建第二个接口 延伸Traverser
  • 创建一个非匿名的内部类并实现 Traverser