繁体   English   中英

Java泛型有界类型不适用于方法参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM