1
很麻煩的Java問題。此代碼有錯誤:關於通用有界通配符類型的混淆
public abstract class SubTypeDependentEditor<T> implements Editor<T> {
protected abstract Editor<? extends T> getEditorFor(T obj);
public void edit(T obj) {
Editor<? extends T> editor = getEditorFor(obj);
editor.edit(obj); // ERROR IS HERE
}
}
什麼是解決它的正確方法?
的T
的想法基本上是一個類型類層次結構根的,所以給出一個層次是這樣的:
class Entity {}
class EntityA extends Entity {}
class EntityB extends Entity {}
一個將T
設置爲Entity
和getEditorFor(T obj)
負責返回Editor<X>
其中X
依賴在obj
的具體類型和總是Is-A T
。因此,如果您有SubTypeDependentEditor<Entity>
,getEditorFor(T obj)
返回Editor<EntityA>
當obj
是EntityA
和Editor<EntityB>
時obj
是EntityB
。
任何機會,這可以實施沒有警告?
更新:
protected abstract Editor<? extends T> getEditorFor(T obj);
基本上可以有其他的簽名,但是實現的代碼只有那些Editor<X>
對象,所以在這種情況下,方法返回Editor<T>
我不知道如何實現getEditorFor(T obj)
代碼。
代碼給出的錯誤是什麼? – chrisbunney 2011-12-27 20:10:05
在某些地方使用通配符('?extends T'),而不是僅僅使用'T',你的理由是什麼? – 2011-12-27 20:11:25
編譯器實際上說錯了什麼?編輯器界面中定義了編輯方法嗎? – Natix 2011-12-27 20:12:26