Ter*_*Lam 5 java generics list bounded-types
关于带有列表的泛型有界类型,我遇到了一个小问题.请帮忙!
Model.java
public class Model {
}
Run Code Online (Sandbox Code Playgroud)
ClassA.java
public class ClassA<T extends Model> {
private List<T> models;
public ClassA() {
models.add((T) new Model());
}
}
Run Code Online (Sandbox Code Playgroud)
它在这一行给我一个从模型到T警告的未经检查的强制转换:
models.add((T) new Model());
Run Code Online (Sandbox Code Playgroud)
我知道我收到了这个警告,因为我可以安全地从一个子类投射到一个超级类而不是反过来.
有没有办法解决这个问题,还是我可以安全地压制警告?
Jam*_*unn 10
你无法做你想做的事.
由于T是Model的子类:
特别:
如果通过调用new Model()来构造新模型,则实例恰好是Model而不是任何子类的实例.
凡子类扩展超类,你永远不能成功地做到这一点:
(Subclass) new Superclass();
Run Code Online (Sandbox Code Playgroud)
因此,您无法成功将新模型强制转换为T的实例.
编译器只会给你一个警告,你可以忽略或抑制,但是当你运行你的程序并调用add()方法时你会得到一个ClassCastException.