私はJavaGenericsについて読んでいて、少し混乱しているこのトピックに出くわしました。
差出人:http ://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ205
public abstract class Node <N extends Node<N>> {
private final List<N> children = new ArrayList<N>();
private final N parent;
protected Node(N parent) {
this.parent = parent;
parent.children.add(this); // error: incompatible types
}
public N getParent() {
return parent;
}
public List<N> getChildren() {
return children;
}
}
public class SpecialNode extends Node<SpecialNode> {
public SpecialNode(SpecialNode parent) {
super(parent);
}
}
いくつかの画面を下にスクロールします...
public abstract class Node <N extends Node<N>> {
...
protected Node(N parent) {
this.parent = parent;
parent.children.add( (N)this ); // warning: unchecked cast
}
...
}
ターゲットタイプがタイプパラメータであるキャストは、実行時に検証できず、チェックされていない警告が発生します。この安全でないキャストは、予期しないClassCastExceptionの可能性をもたらすため、回避するのが最善です。
上記のコードがClassCastExceptionをスローする例を誰かに教えてもらえますか?
ありがとう。