使用匿名内部 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() 方法。
由于 sum
是 Traverser
类型,您只能调用在 Traverser
接口中声明的方法。您的选择是:
- 只需在界面中添加功能
public int totalTime();
定义。
- 使用所需的函数声明创建第二个接口
扩展
Traverser
.
- 创建一个非匿名的内部 class 并实现
Traverser
.
更新:如何在不修改界面的情况下将持续时间相加?
我无法访问匿名内部实例的方法 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() 方法。
由于 sum
是 Traverser
类型,您只能调用在 Traverser
接口中声明的方法。您的选择是:
- 只需在界面中添加功能
public int totalTime();
定义。 - 使用所需的函数声明创建第二个接口
扩展
Traverser
. - 创建一个非匿名的内部 class 并实现
Traverser
.