我需要在HashMap
中存储不同类型数值数据的数组。每个数组都是一个可测量的变量,例如温度,我需要将变量名称和单位存储在数组中,所以我在下面创建了类:
public class Variable <T> {
public T[] array;
public String name;
public String unit;
......etc
}
我希望能够保存Integer[]
,Double[]
和Long[]
,这就是我使用通用<T>
的原因。我尝试过使用public Number[] array
,但这并不能让我保存不同的类型。
我尝试使用以下代码将其存储在HashMap<String,Variable<Number>> map
中:
Variable<Long> temperature = new Variable<Long>();
map.put(temperature.name, temperature);
但是我收到了错误:
The method put(String, Variable<Number>) in the type
HashMap<String,Variable<Number>> is not applicable for the arguments
(String, Variable<Long>)
我该如何解决这个问题?
答案 0 :(得分:4)
即使Long
是Number
的子类,Variable<Long>
也不是Variable<Number>
的子类。此操作仅适用于泛型。
使用HashMap<String,Variable<? extends Number>>
,您可以put()
一个Variable<Long>
。但是,如果没有不安全的转换,您将无法检索它,因为检索到的类型将是Variable<? extends Number>
。
答案 1 :(得分:4)
您可以使用wildcards来帮助您:
Map<String, Variable<? extends Number>> map = new HashMap<>();
Variable<Long> varLong = new Variable<>(new Long[]{5L});
map.put("long", varLong);
Number number = map.get("long").array[0];
System.out.println(number.doubleValue());
打印出来:5.0