2012-02-17 27 views
11

Qui, sto cercando di convertire i valori della mappa in una matrice String, ma io sono sempreconvertire Mappa valori nella matrice di stringhe

errore

ERROR/AndroidRuntime(23588): Caused by: java.lang.ClassCastException: [Ljava.lang.Object; 

Codice

Map<String,String> contactNumber = new HashMap<String,String>(); 

String results [] = (String[]) contactNumber.values().toArray(); 

risposta

21

È necessario utilizzare l'altro metodo toArray(T[] a).

String[] result = contactNumber.values().toArray(new String[0]); 
6

non è possibile eseguire il cast come questo. Invece, chiamare l'altro metodo di toArray:

String[] result = contactNumber.values().toArray(new String[0]); 
4

si invoca il metodo toArray() sull'interfaccia collezione che restituisce un array di oggetti. Passare a toArray (T [] a) dovrebbe aiutare a risolvere il problema. I javadoc dovrebbero aiutare a chiarire ulteriormente la risposta.

/** 
* Returns an array containing all of the elements in this collection. 
* If this collection makes any guarantees as to what order its elements 
* are returned by its iterator, this method must return the elements in 
* the same order. 
* 
* <p>The returned array will be "safe" in that no references to it are 
* maintained by this collection. (In other words, this method must 
* allocate a new array even if this collection is backed by an array). 
* The caller is thus free to modify the returned array. 
* 
* <p>This method acts as bridge between array-based and collection-based 
* APIs. 
* 
* @return an array containing all of the elements in this collection 
*/ 
Object[] toArray(); 

/** 
* Returns an array containing all of the elements in this collection; 
* the runtime type of the returned array is that of the specified array. 
* If the collection fits in the specified array, it is returned therein. 
* Otherwise, a new array is allocated with the runtime type of the 
* specified array and the size of this collection. 
* 
* <p>If this collection fits in the specified array with room to spare 
* (i.e., the array has more elements than this collection), the element 
* in the array immediately following the end of the collection is set to 
* <tt>null</tt>. (This is useful in determining the length of this 
* collection <i>only</i> if the caller knows that this collection does 
* not contain any <tt>null</tt> elements.) 
* 
* <p>If this collection makes any guarantees as to what order its elements 
* are returned by its iterator, this method must return the elements in 
* the same order. 
* 
* <p>Like the {@link #toArray()} method, this method acts as bridge between 
* array-based and collection-based APIs. Further, this method allows 
* precise control over the runtime type of the output array, and may, 
* under certain circumstances, be used to save allocation costs. 
* 
* <p>Suppose <tt>x</tt> is a collection known to contain only strings. 
* The following code can be used to dump the collection into a newly 
* allocated array of <tt>String</tt>: 
* 
* <pre> 
*  String[] y = x.toArray(new String[0]);</pre> 
* 
* Note that <tt>toArray(new Object[0])</tt> is identical in function to 
* <tt>toArray()</tt>. 
* 
* @param a the array into which the elements of this collection are to be 
*  stored, if it is big enough; otherwise, a new array of the same 
*  runtime type is allocated for this purpose. 
* @return an array containing all of the elements in this collection 
* @throws ArrayStoreException if the runtime type of the specified array 
*   is not a supertype of the runtime type of every element in 
*   this collection 
* @throws NullPointerException if the specified array is null 
*/ 
<T> T[] toArray(T[] a); 
Problemi correlati