更新:如何在不修改界面的情况下加总持续时间?
我无法访问匿名内部类的实例的方法。我收到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/