我正在琢磨一些關於在子類化時能夠「縮小」返回類型的奇怪泛型行爲。我設法把問題縮小到以下組類:縮小繼承的返回類型(涉及到的泛型)
public class AbstractIndex {
}
public class TreeIndex extends AbstractIndex {
}
public interface IService<T extends AbstractIndex> {
}
public interface ITreeService extends IService<TreeIndex> {
}
public abstract class AbstractServiceTest<T extends AbstractIndex> {
abstract <V extends IService<T>> V getService();
}
public class TreeServiceTest extends AbstractServiceTest<TreeIndex> {
@Override
ITreeService getService() {
return null;
}
}
問題是,當我嘗試的getService
返回類型縮小到ITreeService
是Java的警告。該警告是
類型安全:從TreeServiceTest需要選中轉換成與類型AbstractServiceTest符合伏類型的getService的返回類型ITreeService()
爲什麼不ITreeService一個有效的縮小型getService
?
編輯:改變錯誤警告
您的代碼編譯並運行在這裏與Java 6 – jarnbjo 2010-01-26 15:54:25
@jarnbjo,它實際上是一個警告不是錯誤 – notnoop 2010-01-26 15:55:41
對不起,是的。我的錯。這是一個警告,而不是一個錯誤。我會更新這個問題。 – JesperE 2010-01-26 16:16:25