[英]Java Generics bounded type doesn't apply to method parameters
我有以下这些(简化的)类:
public abstract class BaseDataSource<T extends BaseDbPojo> {
public abstract List<T> getAllEntities();
public abstract boolean deleteEntity(T t);
}
public class TestsDataSource extends BaseDataSource {
@Override
public List<Test> getAllEntities() {...}
@Override
public boolean deleteEntity(Test t) {...}
}
Test
在哪里扩展BaseDbPojo
。
现在, getAllEnities()
很好-它被认为是其超抽象方法的有效替代。 deleteEntity(Test t)
-不是,并且接受其他派生类型的BaseDbPojo
任何其他方法都会产生BaseDbPojo
错误。
我的IDE(InteliJ)建议:
@Override
public boolean deleteEntity(BaseDbPojo baseDbPojo) {...}
显然这不是我想要的-我希望该方法接收BaseDbPojo
的子类-在我们的例子中为Test
。
如果我在类范围内声明了<T extends BaseDbPojo>
,为什么编译器仅将其视为方法返回类型而不是方法参数?
你缺少的类型参数在extends
的条款TestsDataSource
。 没有它,您将扩展原始BaseDataSource
,这意味着T
经历类型擦除而成为Object
。 在extends
子句中为T
- Test
提供类型参数。
class TestsDataSource extends BaseDataSource<Test> {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.