为什么我收到此错误
public void getParameters(Map<String,Object> param){
}
public void test(){
Map<String,String[]> testMap = new HashMap<String,String[]>();
getParameters(testMap); // type is not applicable error here
}
因为我可以将String数组传递给对象,如下所示。有人可以解释一下吗?
public void getParameters(Object param){
}
public void test(){
String[] testArray = new String[10];
getParameters(testArray);
}
答案 0 :(得分:2)
Java使用值复制,这意味着您可以安全地执行此操作
String s = "Hello";
Object o = s;
o = 5; // `s` is not corrupted by this.
但是,您无法更改引用其他类型的内容。
Map<String, String> map = new HashMap<>();
map.put("hi", "hello");
Map<String, Object> map2 = (Map) map;
map2.put("hi", 5); // map now has an Integer value in it.
String s = map.get("hi"); // ClassCastException.
这就是为什么你不能安全地将Map<String, String[]>
作为Map<String, Object[]>
传递,因为后者会让你这样做
Object[] os = new Integer[1];
param.put("hi", os); // Your Map<String, String[]> is corrupted.
答案 1 :(得分:0)
String extends Object,这样可以正常工作,但泛型不会那样。
这里有很好的解释http://docs.oracle.com/javase/tutorial/extra/generics/subtype.html
答案 2 :(得分:0)
您需要完全匹配相关类的类型参数。这意味着Map<String, String[]>
无法分配给Map<String, Object>
。要使代码工作,请使用通配符:
public void getParameters(Map<String, ? extends Object> param){
}
或在这种情况下只是
public void getParameters(Map<String, ?> param){
}