关于在子类化时能够"缩小"返回类型,我正在努力解决一些奇怪的泛型行为.我设法将问题减少到以下几组:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我试图缩小的返回类型的Java警告getService到ITreeService.警告是
类型安全:从TreeServiceTest类型返回类型ITreeService for getService()需要未经检查的转换以符合类型AbstractServiceTest中的V
为什么ITreeService不是有效的缩小类型getService?
编辑:将错误更改为警告
因为我认为你的意思是:
public abstract class AbstractServiceTest<T extends AbstractIndex> {
abstract IService<T> getService();
}
Run Code Online (Sandbox Code Playgroud)
V除了添加子类无法实现的约束之外,创建单独的类型变量没有任何意义.:-P