2012-02-15 13 views
19
import java.util.HashMap; 
import java.util.Map; 


public class Main 
{ 
    public static void main(String[] args) 
    { 
     Map<Integer,Class> map=new HashMap<Integer,Class>(); 
     map.put(0,Main.class); 
     Class[] classes=(Class[])map.values().toArray(); 
     for (Class c:classes) 
      System.out.println(c.getName()); 
    } 

} 

Bu satır Class[] classes=(Class[])map.values().toArray();'u kullanmaya çalışıyorum ama istisna olsun.Collection.toArray() java.lang.ClassCastException

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Class; at Main.main(Main.java:11)

sorunu nedir? Bir Object[] [ve Object[]] 'dan türetilen hiçbir nesne için

+0

, ile ne kadar "[L ...;" sınıf isimleri için notasyon? – masterxilo

cevap

34

Değişimi:

Class[] classes = (Class[]) map.values().toArray(); 

için:

Class[] classes = map.values().toArray(new Class[0]); 

Bu dizinin tip Collection dönüştürmek için hangi hakkında bilgi verir. Aksi takdirde, Object türünde bir dizi döndürür (ve bu, Class[]'a dönüştürülemez).


the API documentation for Collection.toArray(T[] a) Alıntı:

bu koleksiyonunda tüm elemanları ihtiva eden bir dizi döner; döndürülen dizinin çalışma zamanı türü belirtilen dizininki. ...
Not: toArray() işlevinde aynı olduğunu unutmayın.

4

toArray()10. Bu dizinin her elemanı tip Class ait olmakla birlikte, dizinin kendisi tip Class[]

yerine dizi döküm veya çevrimi önlemek için Collection.toArray(T[]) kullanmaya çalışmakla Class için dizideki her öğeyi kullanması gereklidir ait değildir.

0

Kullanım valuesmap yani sınıf adlarını sıralar için bu kodu: Ayrıca

Object[] array = map.values().toArray(); 
for (Object object : array) { 
    System.out.println(object.toString()); 
} 
İlgili konular