Java 以通用类型作为键/值的通用映射
Java Generic Map with Generic Type as key/ values
我想写一个方法,它以一个 Map 作为参数,它可以包含任何对象作为它的值。我正在尝试使用泛型来实现它,但我无法实现它。
下面是我目前试过的代码。这段代码有两种方法:genericTest
,我试图实现一个通用解决方案,nonGenericTest
,这是我实际上想用通用解决方案做的,但在没有使用泛型的情况下实现。基本上,第二种方法是我想转换为泛型的方法。
我做错了什么?
import java.util.Iterator;
import java.util.Map;
public class Test {
//V cannot be resolve to a type
public void genericTest(Map<String, V> params) {
}
public void nonGenericTest(Map<String, Object> params) {
Iterator<String> it = params.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
Object value = params.get(key);
if(value instanceof String){
String val1=(String) value;
// do something
}else if(value instanceof Integer){
Integer val1 = (Integer) value;
}
}
}
}
我收到编译器错误,如代码所示。
您有两个选择:
将V
作为类型参数引入class.
public class Test<V>
引入 V
作为该函数的类型参数。
public <V> void genericTest(Map<String, V> params)
我建议将它与这样的 class 定义一起使用:
public class SettingsClient<T> extends TestWebserviceClient {
private Map<String, List<T>> mapWithAllPojoLists = new HashMap<>();
}
在该方法中,您可以像这样读取/写入地图:
public List<Discount> getListOfDiscounts() {
if (mapWithAllPojoLists.get("discount") != null) {
return (List<Discount>) mapWithAllPojoLists.get("discount");
}
GetDiscountsResponse response = getGetDiscountsResponse();
ArrayOfDiscount arrayOfDiscount = response.getGetDiscountsResult().getValue();
List<Discount> discounts = arrayOfDiscount.getDiscount();
if (discounts == null) {
return new ArrayList<>();
}
mapWithAllPojoLists.put("discount", (List<T>) discounts);
return discounts;
}
我想写一个方法,它以一个 Map 作为参数,它可以包含任何对象作为它的值。我正在尝试使用泛型来实现它,但我无法实现它。
下面是我目前试过的代码。这段代码有两种方法:genericTest
,我试图实现一个通用解决方案,nonGenericTest
,这是我实际上想用通用解决方案做的,但在没有使用泛型的情况下实现。基本上,第二种方法是我想转换为泛型的方法。
我做错了什么?
import java.util.Iterator;
import java.util.Map;
public class Test {
//V cannot be resolve to a type
public void genericTest(Map<String, V> params) {
}
public void nonGenericTest(Map<String, Object> params) {
Iterator<String> it = params.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
Object value = params.get(key);
if(value instanceof String){
String val1=(String) value;
// do something
}else if(value instanceof Integer){
Integer val1 = (Integer) value;
}
}
}
}
我收到编译器错误,如代码所示。
您有两个选择:
将
V
作为类型参数引入class.public class Test<V>
引入
V
作为该函数的类型参数。public <V> void genericTest(Map<String, V> params)
我建议将它与这样的 class 定义一起使用:
public class SettingsClient<T> extends TestWebserviceClient {
private Map<String, List<T>> mapWithAllPojoLists = new HashMap<>();
}
在该方法中,您可以像这样读取/写入地图:
public List<Discount> getListOfDiscounts() {
if (mapWithAllPojoLists.get("discount") != null) {
return (List<Discount>) mapWithAllPojoLists.get("discount");
}
GetDiscountsResponse response = getGetDiscountsResponse();
ArrayOfDiscount arrayOfDiscount = response.getGetDiscountsResult().getValue();
List<Discount> discounts = arrayOfDiscount.getDiscount();
if (discounts == null) {
return new ArrayList<>();
}
mapWithAllPojoLists.put("discount", (List<T>) discounts);
return discounts;
}