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

我无法访问匿名内部类的实例的方法。我收到sum.totalTime()调用的编译时错误-“对于Traverser类型,方法totalTime()未定义”

我有一个Traverser界面。

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


我想使用该界面来添加SongEntry对象的duration属性。结果,我实例化了一个匿名内部类,为每个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()方法。

最佳答案

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


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

关于java - 在遍历二叉搜索树中使用匿名内部类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28533398/

10-10 09:54