2016-03-23 16 views
0

Warum ich erhalte diesen FehlerMap <String, Object> Typ ist nicht anwendbar für die Argumente Map <String, String []>

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 

} 

da i String Array wie unten an das Objekt passieren kann. Kann das bitte jemand erklären?

public void getParameters(Object param){ 

} 

public void test(){ 

    String[] testArray = new String[10]; 

    getParameters(testArray); 

} 
+8

Das ist völlig normal würde tun lassen. Sie müssten Ihre Methode 'getParameters' ändern, um' Map 'zu akzeptieren. –

+1

'String []' _is-a_ 'Objekt', aber' Map '_is-NOT-a_' Map '. Vererbung funktioniert nicht so. –

Antwort

0

Sie brauchen eine genaue Übereinstimmung des Typparameters der jeweiligen Klasse. Dies bedeutet, dass Map<String, String[]> nicht zu Map<String, Object> zuweisbar ist. Um Ihren Code Arbeit verwenden, um eine Wildcard zu machen:

public void getParameters(Map<String, ? extends Object> param){ 

} 

oder in diesem Fall einfach

public void getParameters(Map<String, ?> param){ 

} 
2

Java verwendet Kopie von Werten, die bedeutet, dass Sie sicher dieses

tun können
String s = "Hello"; 
Object o = s; 
o = 5; // `s` is not corrupted by this. 

Allerdings können Sie nicht etwas ändern, das auf einen anderen Typ verweist.

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. 

diesem Grund sollten Sie nicht sicher eine Map<String, String[]> als Map<String, Object[]> passieren kann, weil diese Sie

Object[] os = new Integer[1]; 
param.put("hi", os); // Your Map<String, String[]> is corrupted. 
Verwandte Themen