2016-03-23 21 views
0

は、なぜ私はこのエラー地図<文字列、オブジェクト>タイプは、引数地図<文字列、文字列[]>私は以下のようなオブジェクトに文字列の配列を渡すことができますので、

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(Object param){ 

} 

public void test(){ 

    String[] testArray = new String[10]; 

    getParameters(testArray); 

} 
+8

これは完全に正常であるがやらせるだろうので、あなたが安全にMap<String, Object[]>としてMap<String, String[]>を渡すことができない理由です。 'Map 'を受け入れるように 'getParameters'メソッドを変更する必要があります。 –

+1

'String []' _is-a_ 'Object'ですが、' Map '_is-NOT-a_' Map 'です。継承はそのようには機能しません。 –

答えて

0

あなたは、関連するクラスの型パラメータの完全な一致を必要としています。つまりMap<String, String[]>Map<String, Object>に割り当てられません。あなたのコードの作品は、ワイルドカードを使用するには:

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

} 

またはこの場合は単に

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

} 
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. 

後者はあなたが

Object[] os = new Integer[1]; 
param.put("hi", os); // Your Map<String, String[]> is corrupted. 
関連する問題