【发布时间】:2015-09-30 04:27:40
【问题描述】:
我正在阅读 J. Bloch 的有效 Java,我知道未经检查的强制转换永远不会好,除非我们确保强制转换是安全的。现在,由于 Java 集合框架没有为我们提供 Tree 数据结构,我必须自己编写。
public interface TreeVisitor<E, R> {
public R visit(E leaf);
public R visit(E val, Tree<E>... subtrees);
}
public abstract class Tree<E> {
public abstract <R> R accept(TreeVisitor<E, R> visitor);
public Tree<E> leaf(E leaf) {
return new Tree<E>() {
@Override
public <R> R accept(TreeVisitor<E, R> visitor) {
return visitor.visit(leaf);
}
};
}
public Tree<E> branch(E value, Tree<E>... subtrees){ //1
return new Tree<E>(){
@Override
public <R> R accept(TreeVisitor<E, R> visitor) {
return visitor.visit(value, subtrees);
}
};
}
}
在//1,我收到了警告:
类型安全:可变参数子树造成的潜在堆污染
如何检查我的代码是否真的安全?
【问题讨论】: