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

Java Generics bounded type doesn't apply to method parameters

我有这些(简体)classes:

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 的方法都会引发编译错误。

我的 IDE (InteliJ) 建议:

@Override
public boolean deleteEntity(BaseDbPojo baseDbPojo) {...}

这显然不是我想要的 - 我希望该方法接收 BaseDbPojo 的子 class - 在我们的例子中是 Test

如果我在 class 范围内声明了 <T extends BaseDbPojo>,为什么编译器只将其视为方法 return 类型而不是方法参数?

TestsDataSourceextends 子句中缺少类型参数。没有它,您将扩展原始 BaseDataSource,这意味着 T 经历类型擦除成为 Object。在 extends 子句中为 T -- Test -- 提供类型参数。

class TestsDataSource extends BaseDataSource<Test> {