如果有一個通用型兒童類不能被轉換爲普通父
class A<T> { ... }
class B extends A<Qux> { ... }
class C extends B { ...}
到目前爲止好開始了類型層次。現在我有一個使用的參數不同的類(也是通用):
class Foo<T> extends Bar<T> {
setA(A<T> a){ ...}
}
現在我想用這一切:
Foo<Qux> foo = new Foo<Qux>();
foo.setA(new C());
最後一行給出一個錯誤「組A型美孚不適用於參數C「。
我無法弄清楚什麼是錯的。在我看來,它應該工作,因爲C擴展了B,擴展了A,這是應該使用的參數類型...感謝任何提示我的假設有什麼問題。
更新:使用Oli公佈的代碼,我設法更接近錯誤的來源。一旦我用原來的課程取代B,就會發生這種情況。所以它必須位於不使用「通用」部分的類中。在試圖轉換到父類時,Eclipse說它不能。我將繼續尋找在那裏,我知道這應該是工作......這個問題可以減少到這一點:
C c = new C();
A<Qux> a = (A<Qux>)c;
在我的代碼,這導致錯誤
Cannot cast from C to A<Qux>
我仍然沒有爲什麼會發生這種情況爲什麼不能將子類轉換爲父類?沒有這樣的理由。因爲如果你有這樣的問題,它可能只是你的IDE。我由於其他原因重新啓動Eclipse,再次檢查並且它工作正常。
我沒有看到你提到的錯誤(在你的代碼中,我假設'setA'在上面聲明的'foo'實例上被調用)。 –
thx提示電話 – Yashima
我仍在尋找......用我的課程填寫他的代碼,以弄清楚會發生什麼。我會盡快更新問題 – Yashima