I got a small problem here regarding generics bounded type with lists. Please help out!
Model.java
public class Model {
}
ClassA.java
public class ClassA<T extends Model> {
private List<T> models;
public ClassA() {
models.add((T) new Model());
}
}
It gives me an unchecked cast from Model to T warning on this line:
models.add((T) new Model());
I understand I'm getting this warning because all I can safely cast from a sub class into a super class but not the other way round.
Is there any way to get over this problem or can I just safely supress the warning?
You can't do what you're trying to do.
Since T is a subclass of Model:
Specifically:
If you construct a new Model by calling new Model(), the instance is exactly a Model and not an instance of any subclass.
Where Subclass extends Superclass, you can never successfully do this:
(Subclass) new Superclass();
Because of this, you can not successfully cast a new Model to an instance of T.
The compiler will just give you a warning which you can either ignore or suppress, but you'll get a ClassCastException when you run your program and call the add() method.