java - 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>>();
解决方案
试试吧。Map<Integer,
? extends
Map<String, ? extends CellValue<?>>>
推荐阅读
- c# - C# 无法读取数据集中的 xml
- highcharts - 图表未导出到 XLS 文件 - Highcharts
- delphi - 如何在 Windows 7 或更高版本中正确获取系统语言
- c# - “序列不包含匹配元素”我在执行 Linq 代码时收到此错误
- python - 解析 dbus 监视器输出消息
- javascript - 填充输入字段时更改按钮的颜色
- mobx - mobx 的 createTransformer 和 mobx-utils computedFn 有什么区别?
- javascript - 如何在 Web Speech API 中获取特定的女性语音语音合成?
- spring - 无法使用与 Spring 使用 XML 集成的休眠将记录插入数据库
- selenium - 如何在同一命令中定位另一个元素上的第一个图像和动作