gpt4 book ai didi

java - 初始化泛型类

转载 作者:行者123 更新时间:2023-12-01 08:01:42 25 4
gpt4 key购买 nike

我正在尝试定义我的第一个泛型类。我希望它扩展一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com