我正在尝试定义我的第一个泛型类。我希望它扩展一个 HashMap。 它是一个LinkedHashMap,其中键是泛型类型,值也是泛型类型的ArrayList。
构建此类的实例就可以了。但是,当我想添加值时,编译器会说
incompatible types: String cannot be converted to T_KEY
addMapValue("first", new Integer(2));
where T_KEY is a type-variable:
T_KEY extends Object declared in class FormattedMap
我想这可能是由于我的变量 T_KEY 和 T_VALUE 未初始化? 我如何初始化它们?
这是我的类(class):
public class FormattedMap<T_KEY, T_VALUE> extends LinkedHashMap<T_KEY, ArrayList<T_VALUE>> {
private T_KEY mapKey;
private T_VALUE mapValue;
public boolean DEBUG=false;
public FormattedMap() {
super();
}
public void addMapValue(T_KEY key, T_VALUE value) {
}
public void removeMapValue(T_KEY key, T_VALUE value) {
}
public void test(boolean b) {
addMapValue("first", new Integer(2)); // This triggers the compilor error message
}
public static void main(String [] args) {
FormattedMap<String, Integer> fm = new FormattedMap<>(); // This is fine
fm.test(true);
}
}
最佳答案
让我们忘记你的主要方法。该类的代码如下
public class FormattedMap<T_KEY, T_VALUE> extends LinkedHashMap<T_KEY, ArrayList<T_VALUE>> {
private T_KEY mapKey;
private T_VALUE mapValue;
public boolean DEBUG=false;
public FormattedMap() {
super();
}
public void addMapValue(T_KEY key, T_VALUE value) {
}
public void removeMapValue(T_KEY key, T_VALUE value) {
}
public void test(boolean b) {
addMapValue("first", new Integer(2)); // This triggers the compilor error message
}
}
因此,您的类定义了一个 test()
方法,该方法使用 String 和 Integer 作为参数调用 addMapValue(T_KEY key, T_VALUE value)
方法。鉴于您的类是通用的,通用类型可以是任何类型。不一定是字符串和整数。所以这个方法无法编译通过。
而且,你的类还定义了两个完全没用的字段mapKey和mapValue。
代码应该是:
public class FormattedMap<T_KEY, T_VALUE> extends LinkedHashMap<T_KEY, ArrayList<T_VALUE>> {
public FormattedMap() {
super();
}
public void addMapValue(T_KEY key, T_VALUE value) {
}
public void removeMapValue(T_KEY key, T_VALUE value) {
}
public static void main(String [] args) {
FormattedMap<String, Integer> fm = new FormattedMap<>(); // This is fine
fm.addMapValue("first", new Integer(2));
// this is valid, because fm is of type FormattedMap<String, Integer>
}
}
请注意,扩展 LinkedHashMap 无论如何肯定是一个坏主意。你的类应该有一个 LinkedHashMap,而不是一个 LinkedHashMap。
关于java - 初始化泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24911179/