更新:如何在不修改界面的情况下最好地累加持续时间?
我无法访问匿名内部类的实例的方法。我得到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()方法。
答案 0 :(得分:1)
由于sum
的类型为Traverser
,因此您只能调用Traverser
接口中声明的方法。您的选择是:
public int totalTime();
添加到界面即可
定义Traverser
。Traverser
。