我有以下无法编译并生成Error:() java: type argument GroupOfPartsDecorImpl<V> is not within bounds of type-variable GOP的示例。代码如下:

class MainContainerGroupPartDecorator<V, GOP extends GroupOfParts<V, PartDecorator<V, ? extends Part<V>>>>
extends BaseContainerGroupPartDecorator<V, GOP> {
    public static <V> MainContainerGroupPartDecorator<V, GroupOfPartsDecorImpl<V>> getInstance() {
        return null;
    }
}

class BaseContainerGroupPartDecorator<V, GOP extends GroupOfParts<V, ?>> {
    void something() {}
}

class GroupOfPartsDecorImpl<V> implements GroupOfParts<V, PartDecorator<V, PartImpl1<V>>> {
    @Override
    public Collection<PartDecorator<V, PartImpl1<V>>> getParts() {
        return null;
    }
}

interface GroupOfParts<V, P extends Part<V>> {
    Collection<P> getParts();
}

class PartDecorator<V, P extends Part<V>> implements Part<V> {
    @Override
    public V getId() {
        return null;
    }
}

class PartImpl1<V> implements Part<V> {
    @Override
    public V getId() {
        return null;
    }
}


由于GOP是GOP extends GroupOfParts<V, PartDecorator<V, ? extends Part<V>>>,而GroupOfPartsDecorImpl应该以GroupOfParts<V, PartDecorator<V, Part<V>>结尾,为什么出现此错误?

最佳答案

GroupOfParts的第二个通用参数必须为PartDecorator<V, ? extends Part<V>>。而且由于泛型默认情况下是不变的,因此不会有任何偏差。但是GroupOfPartsDecorImpl使用PartDecorator<V, PartImpl1<V>>,这是不一样的,因此无法编译。

您可以通过在MainContainerGroupPartDecorator的声明中使第二个参数协变来解决此问题:

class MainContainerGroupPartDecorator<V, GOP extends GroupOfParts<V,
    ? extends PartDecorator<V, ? extends Part<V>>>>
    extends BaseContainerGroupPartDecorator<V, GOP> {


(基本上将PartDecorator<V, ? extends Part<V>>更改为? extends PartDecorator<V, ? extends Part<V>>

09-05 05:29