首页 > 解决方案 > Java 泛型可分配性

问题描述

我在泛型类型参数的分配能力上有些挣扎。

以下是我的类型定义的外观:

public static interface CellValue<T> {
    T getValue();
    Class<?> getType();
}

public static class DoubleCell implements CellValue<Double> {
    Double value;

    public DoubleCell(Double value) {
        super();
        this.value = value;
    }

    @Override
    public Double getValue() {
        return value;
    }

    @Override
    public Class<?> getType() {
        return Double.class;
    }
}

public static class FormulaCell implements CellValue<String> {
    String value;

    public FormulaCell(String value) {
        this.value = value;
    }

    @Override
    public String getValue() {
        return value;
    }

    @Override
    public Class<?> getType() {
        return String.class;
    }
}

现在,为什么以下声明有效(对我来说,这是预期的行为,但我可能误解了它为什么有效)

Map<String, ? extends CellValue<?>> m = new HashMap<String, FormulaCell>();
Map<String, ? extends CellValue<?>> m2 = new HashMap<String, DoubleCell>();

..而以下没有?

Map<Integer, Map<String, ? extends CellValue<?>>> n = new HashMap<Integer, Map<String, FormulaCell>>();
Map<Integer, Map<String, ? extends CellValue<?>>> n2 = new HashMap<Integer, Map<String, DoubleCell>>();

标签: javagenericstype-parametergeneric-collections

解决方案


试试吧。Map<Integer,? extendsMap<String, ? extends CellValue<?>>>


推荐阅读