2016-03-23 20 views
0

Neden ben bu hatayıHarita <String, Object> tip argümanları Harita <String, String []> i aşağıda gibi itiraz Dize dizisi iletebilir beri

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 

} 

alıyorum için geçerli değildir. Birisi bunu açıklayabilir mi lütfen? eserler ancak jenerik o şekilde çalışmıyor böylece

public void getParameters(Object param){ 

} 

public void test(){ 

    String[] testArray = new String[10]; 

    getParameters(testArray); 

} 
+8

yapalım çünkü güvenle bir Map<String, Object[]> gibi bir Map<String, String[]> geçemez neden

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. 

Bu

olduğunu. Harita 'seçeneğini kabul etmek için' getParameters 'yönteminizi değiştirmeniz gerekir. –

+1

'Dize []' _is-a_ 'Nesne', ancak 'Harita ' _is-NOT-a_ 'Harita '. Kalıtım bu şekilde çalışmıyor. –

cevap

0

Dize Nesne uzanır.

İyi açıklama burada

0

http://docs.oracle.com/javase/tutorial/extra/generics/subtype.html Alakalı sınıfın tipi parametrelerinin bir tam eşleşme gerekir. Bu, Map<String, String[]>'un Map<String, Object>'a atanması anlamına gelir. kod çalışma joker kullanmak yapmak için: güvenle bu

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

yapmak anlamına gelir değerleriyle

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

} 

veya bu durumda

basitçe

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

} 
2

Java kopyasını kullanır Ancak yapabilirsiniz Farklı bir türe başvuran bir şeyi değiştirmeyin. İkincisi Eğer bu son derece normaldir

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