在一些SuperClass
我有一個抽象的通用方法的返回類型:重寫通用抽象方法的沒有類型安全警告
protected abstract <T extends Foo> T getFoo();
在我我嘗試重寫它:
@Override
protected SubFoo getFoo() {
return new SubFoo();
}
其中public class SubFoo extends Foo
在我的子類的getFoo
我得到以下錯誤。
「類型安全:對的getFoo返回類型SubFoo()從類型子類需要選中轉換成與類型父類符合T」
我的問題是:
1)是否有任何情況哪裏不安全?
2)如果不是,編譯器不應該能夠解決這個問題嗎?什麼是阻止編譯器弄清楚SubFoo是編譯時Foo的子類?
3)有沒有辦法實現這樣的事情,但警告自由?
這本質上是不安全的。如果我用另一個類型參數調用你的方法會怎麼樣? – SLaks 2013-02-26 17:57:10
@你違反了里斯科換人原則......你的超類型不能被你的子類型取代 – Geek 2013-02-26 18:26:57