Java 地图<;字符串,对象>;类型不适用于参数映射<;字符串,字符串[]>;
为什么我会犯这个错误Java 地图<;字符串,对象>;类型不适用于参数映射<;字符串,字符串[]>;,java,generics,Java,Generics,为什么我会犯这个错误 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 } 字符串扩展
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
}
字符串扩展对象以便工作,但泛型不能这样工作
这里有很好的解释字符串扩展了对象,这样可以工作,但泛型不能这样工作
这里的解释很好您需要与相关类的类型参数精确匹配。这意味着
Map
不可分配给Map
。要使代码正常工作,请使用通配符:
public void getParameters(Map<String, ? extends Object> param){
}
public void getParameters(映射参数){
}
或者在这种情况下只是
public void getParameters(Map<String, ?> param){
}
public void getParameters(映射参数){
}
您需要与相关类的类型参数精确匹配。这意味着Map
不可分配给Map
。要使代码正常工作,请使用通配符:
public void getParameters(Map<String, ? extends Object> param){
}
public void getParameters(映射参数){
}
或者在这种情况下只是
public void getParameters(Map<String, ?> param){
}
public void getParameters(映射参数){
}
Java使用copy by value,这意味着您可以安全地执行此操作
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 Map=newhashmap();
放在地图上(“你好”、“你好”);
Map map2=(Map)Map;
地图2。把“嗨”,5)放进去映射现在包含一个整数值。
字符串s=map.get(“hi”);//ClassCastException。
这就是为什么您不能将Map
作为Map
安全地传递,因为后者会允许您这样做
Object[] os = new Integer[1];
param.put("hi", os); // Your Map<String, String[]> is corrupted.
Object[]os=新整数[1];
参数put(“hi”,os);//您的地图已损坏。
Java使用copy by value,这意味着您可以安全地执行此操作
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 Map=newhashmap();
放在地图上(“你好”、“你好”);
Map map2=(Map)Map;
地图2。把“嗨”,5)放进去映射现在包含一个整数值。
字符串s=map.get(“hi”);//ClassCastException。
这就是为什么您不能将Map
作为Map
安全地传递,因为后者会允许您这样做
Object[] os = new Integer[1];
param.put("hi", os); // Your Map<String, String[]> is corrupted.
Object[]os=新整数[1];
参数put(“hi”,os);//您的地图已损坏。
这完全正常。您需要更改getParameters
方法以接受Map
String[]
is-aObject
,但Map
is-NOT-aMap
。继承不是这样的,这很正常。您需要更改getParameters
方法以接受Map
String[]
is-aObject
,但Map
is-NOT-aMap
。继承不是这样的。