我創建了一個HashMap,它將我的抽象Model的類保存爲key,然後將Model的一個實例保存爲值。雖然我似乎無法補充。看起來Java並沒有足夠的智能來認識到我放入HashMap的實際上是Model實例的一個子類。向hashmap添加泛型類
abstract public class EntityManager<AbstractModel> {
@Inject
protected static Injector injector;
private HashMap<Class<? extends AbstractModel>, AbstractModel> models = new HashMap<Class<? extends AbstractModel>, AbstractModel>();
public void register(final AbstractModel model) {
models.put(model.getClass(), model); // <-- the problem
}
public AbstractModel get(Class<? extends AbstractModel> Class) {
AbstractModel model = models.get(Class);
if (model == null) {
throw new RuntimeException("Attempting to retrieve an unregistered model.");
} else {
return model;
}
}
}
的IntelliJ是告訴我它試圖添加Class<? extends Object>
代替Class<? extends Model>
注會:1.你應該使用界面,即'Map'; 2.所有類都是單例,所以你應該使用'IdentityHashMap':'private Map,AbstractModel> models = new IdentityHashMap ,AbstractModel>();' –
fge
你正在做的事情幾乎就是Guava的['MutableClassToInstanceMap'](http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/谷歌/普通/收集/ MutableClassToInstanceMap.html)。 –
這編譯罰款:http://ideone.com/0QsACc我錯過了什麼? –