如何实现通用的递归接口?

时间:2017-07-28 05:54:28

标签: java generics

java泛型混淆的另一个案例......

我定义了一个接口层次结构,它必须包含一个返回该接口类型列表的方法。这是递归通用模式的标准用例(或者无论其名称是什么):

interface SuperInter<T extends SuperInter<T>> {
    List<T> getEffects();
}

现在我扩展了这个界面:

interface SubInter extends SuperInter<SubInter> {}

我可以实现子接口并使用正确的方法来实现:

class SubImpl implements SubInter {

    @Override
    public List<SubInter> getEffects() {
        return null;
    }
}

类似地,任何其他使用自身作为泛型类型的接口都将使其实现类包含一个返回该接口列表的方法。

但是,我无法正确实现超级接口类型:

class SuperImpl implements SuperInter<SuperInter> {

    @Override
    public List<SuperInter> getEffects() {
        return null;
    }
}

除了原始类型警告,我得到:

Bound mismatch: The type SuperInter is not a valid substitute for the bounded parameter <T extends SuperInter<T>> of the type SuperInter<T>

我猜因为班级没有延伸。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以按如下方式声明:

class SuperImpl implements SuperInter<SuperImpl> {

    @Override
    public List<SuperImpl> getEffects() {
        return null;
    }
}