缩小继承的返回类型(涉及泛型)

Jes*_*erE 4 java generics

关于在子类化时能够"缩小"返回类型,我正在努力解决一些奇怪的泛型行为.我设法将问题减少到以下几组:

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?

编辑:将错误更改为警告

Chr*_*ung 5

因为我认为你的意思是:

public abstract class AbstractServiceTest<T extends AbstractIndex> {
    abstract IService<T> getService();
}
Run Code Online (Sandbox Code Playgroud)

V除了添加子类无法实现的约束之外,创建单独的类型变量没有任何意义.:-P