私は次のコードを持っています:
public class Foo {
interface Coo<T> {
public T cool();
}
abstract class Bar<T extends Bar<T>> implements Coo<T> {
@SuppressWarnings("unchecked")
T doSomething() {
return (T) this;
}
@SuppressWarnings("unchecked")
@Override
public T cool() {
return (T) this;
}
}
class FooBar extends Bar<FooBar> {
@Override
public FooBar cool() {
return super.cool();
}
}
}
(この)オブジェクトタイプへのキャストが安全でないのはなぜですか?BarがCooを実装する場合、返されるクールは、Barまたはそのサブクラスを拡張するタイプTでなければならないという一般的な言い回しではありませんか?