如题所述
ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();
è¿æ ·å代ç 个人è§å¾åºè¯¥æ²¡ä»ä¹é®é¢ï¼ç¼è¯ä¹æ²¡æé®é¢ãå¯æ¯å ·ä½è¿è¡çæ¶åæ¥å¼å¸¸ï¼å¦ä¸ï¼Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
ä½æ¯è¿ä¹åæ¯æ²¡æé®é¢çï¼
ArrayList<String> list=new ArrayList<String>();
String strings[]=new String[list.size()];
for(int i=0,j=list.size();i<j;i++){
strings[i]=list.get(i);
}
对äºè¿ä¸ªç°è±¡æ们å¯ä»¥è¿ä¹è§£éï¼Javaä¸å 许åä¸ååä¸è½¬åï¼ä½æ¯è¿ä¸ªè½¬åæ¯å¦æåæ¯æ ¹æ®Javaèææºä¸è¿ä¸ªå¯¹è±¡çç±»åæ¥å®ç°çãJavaèææºä¸ä¿åäºæ¯ä¸ªå¯¹è±¡çç±»åãèæ°ç»ä¹æ¯ä¸ä¸ªå¯¹è±¡ãæ°ç»çç±»åæ¯[Ljava.lang.Objectãæ[Ljava.lang.Object转æ¢æ[Ljava.lang.Stringæ¯æ¾ç¶ä¸å¯è½çäºæ ï¼å 为è¿éæ¯ä¸ä¸ªåä¸è½¬åï¼èèææºåªä¿åäºè¿æ¯ä¸ä¸ªObjectçæ°ç»ï¼ä¸è½ä¿è¯æ°ç»ä¸çå ç´ æ¯Stringçï¼æ以è¿ä¸ªè½¬åä¸è½æåãæ°ç»éé¢çå ç´ åªæ¯å ç´ çå¼ç¨ï¼ä¸æ¯åå¨çå ·ä½å ç´ ï¼æ以æ°ç»ä¸å ç´ çç±»åè¿æ¯ä¿åå¨Javaèææºä¸çã
æ ¹æ®ä¸é¢ç解éï¼æ们å¯ä»¥æè¿ä¸ªé®é¢å½çº³å°ä¸é¢è¿ä¸ªæ¨¡åï¼
Object objs[]=new Object[10];
String strs[]=(String[])objs;
è¿æ ·åååæä¸é¢ç¼è¯é误æ¯ä¸æ ·çãå¦ææ们修æ¹ä¸ä¸è¿ä¸ªä»£ç ï¼å¦ä¸ï¼
String strs[]=new String[10];
Object objs[]=strs;
è¿æ ·åå°±å¯ä»¥ç¼è¯éè¿äºãæ以è¿ä¸ªé®é¢æ们å¯ä»¥å½ç»ä¸ºä¸ä¸ªJava转åè§åçé®é¢ãä¸é¢è°ä¸ä¸Javaæ°ç»å¯¹èåçæ¯æé®é¢ã
JDK5ä¸å·²ç»æäºå¯¹èåçæ¯æï¼è¿æ ·å¯ä»¥ä¿è¯å¨éååMapä¸çæ°æ®ç±»åçå®å ¨ï¼å¯æ¯ï¼ListçtoArrayæ¹æ³è¿åçç«ç¶æ¯Object []让人å¾è¿·æã个人æè§åºè¯¥å¯ä»¥æ ¹æ®èåï¼ç´æ¥è¿åç¸åºçT []ãä»ç»çäºä¸ä¸JDKçåç°List转å为arrayæ两个æ¹æ³ï¼
public Object[] toArray();
è¿ä¸ªæ¹æ³æListä¸çå ¨é¨å ç´ è¿åä¸ä¸ªç¸å大å°çæ°ç»ï¼æ°ç»ä¸çææå ç´ é½ä¸ºObjectç±»åã
public <T> T[] toArray(T[] a);
è¿ä¸ªæ¹æ³æListä¸çå ¨é¨å ç´ è¿åä¸ä¸ªç¸å大å°çæ°ç»ï¼æ°ç»ä¸çææå ç´ é½ä¸ºTç±»åã
Listå¦æ¤è®¾è®¡æ¯å 为Javaç¼è¯å¨ä¸å 许æ们newèåæ°ç»ãä¹å°±æ¯è¯´ä½ ä¸è½è¿ä¹å®ä¹ä¸ä¸ªæ°ç»ï¼
T arr=new T[size];
ä½æ¯ä½ å´å¯ä»¥ç¨T[]æ¥è¡¨ç¤ºæ°ç»ï¼èä¸å¯ä»¥ææ°ç»å¼ºå¶è½¬å为T[]ãæ¯å¦Listä¸çpublic <T> T[] toArray(T[] a)æ¯è¿ä¹å®ç°çï¼
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), size);
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
ä»ä¸é¢ä»£ç ä¸å¯ä»¥çå°ï¼å ä¸ºä½ ä¸ç¥éè¿ä¸ªæ°ç»çç±»åï¼ä½ å¿ é¡»éè¿åå°æºå¶å建è¿ä¸ªæ°ç»ï¼a.getClass().getComponentType()æ¹æ³æ¯åå¾ä¸ä¸ªæ°ç»å ç´ çç±»åï¼ã
æç»ï¼List转æ¢ä¸ºArrayå¯ä»¥è¿æ ·å¤çï¼
ArrayList<String> list=new ArrayList<String>();
String[] strings = new String[list.size()];
list.toArray(strings);
åè¿æ¥ï¼å¦æè¦å°æ°ç»è½¬æListæä¹åå¢ï¼å¦ä¸ï¼
String[] s = {"a","b","c"};
List list = java.util.Arrays.asList(s);
String strings[]=(String [])list.toArray();
è¿æ ·å代ç 个人è§å¾åºè¯¥æ²¡ä»ä¹é®é¢ï¼ç¼è¯ä¹æ²¡æé®é¢ãå¯æ¯å ·ä½è¿è¡çæ¶åæ¥å¼å¸¸ï¼å¦ä¸ï¼Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
ä½æ¯è¿ä¹åæ¯æ²¡æé®é¢çï¼
ArrayList<String> list=new ArrayList<String>();
String strings[]=new String[list.size()];
for(int i=0,j=list.size();i<j;i++){
strings[i]=list.get(i);
}
对äºè¿ä¸ªç°è±¡æ们å¯ä»¥è¿ä¹è§£éï¼Javaä¸å 许åä¸ååä¸è½¬åï¼ä½æ¯è¿ä¸ªè½¬åæ¯å¦æåæ¯æ ¹æ®Javaèææºä¸è¿ä¸ªå¯¹è±¡çç±»åæ¥å®ç°çãJavaèææºä¸ä¿åäºæ¯ä¸ªå¯¹è±¡çç±»åãèæ°ç»ä¹æ¯ä¸ä¸ªå¯¹è±¡ãæ°ç»çç±»åæ¯[Ljava.lang.Objectãæ[Ljava.lang.Object转æ¢æ[Ljava.lang.Stringæ¯æ¾ç¶ä¸å¯è½çäºæ ï¼å 为è¿éæ¯ä¸ä¸ªåä¸è½¬åï¼èèææºåªä¿åäºè¿æ¯ä¸ä¸ªObjectçæ°ç»ï¼ä¸è½ä¿è¯æ°ç»ä¸çå ç´ æ¯Stringçï¼æ以è¿ä¸ªè½¬åä¸è½æåãæ°ç»éé¢çå ç´ åªæ¯å ç´ çå¼ç¨ï¼ä¸æ¯åå¨çå ·ä½å ç´ ï¼æ以æ°ç»ä¸å ç´ çç±»åè¿æ¯ä¿åå¨Javaèææºä¸çã
æ ¹æ®ä¸é¢ç解éï¼æ们å¯ä»¥æè¿ä¸ªé®é¢å½çº³å°ä¸é¢è¿ä¸ªæ¨¡åï¼
Object objs[]=new Object[10];
String strs[]=(String[])objs;
è¿æ ·åååæä¸é¢ç¼è¯é误æ¯ä¸æ ·çãå¦ææ们修æ¹ä¸ä¸è¿ä¸ªä»£ç ï¼å¦ä¸ï¼
String strs[]=new String[10];
Object objs[]=strs;
è¿æ ·åå°±å¯ä»¥ç¼è¯éè¿äºãæ以è¿ä¸ªé®é¢æ们å¯ä»¥å½ç»ä¸ºä¸ä¸ªJava转åè§åçé®é¢ãä¸é¢è°ä¸ä¸Javaæ°ç»å¯¹èåçæ¯æé®é¢ã
JDK5ä¸å·²ç»æäºå¯¹èåçæ¯æï¼è¿æ ·å¯ä»¥ä¿è¯å¨éååMapä¸çæ°æ®ç±»åçå®å ¨ï¼å¯æ¯ï¼ListçtoArrayæ¹æ³è¿åçç«ç¶æ¯Object []让人å¾è¿·æã个人æè§åºè¯¥å¯ä»¥æ ¹æ®èåï¼ç´æ¥è¿åç¸åºçT []ãä»ç»çäºä¸ä¸JDKçåç°List转å为arrayæ两个æ¹æ³ï¼
public Object[] toArray();
è¿ä¸ªæ¹æ³æListä¸çå ¨é¨å ç´ è¿åä¸ä¸ªç¸å大å°çæ°ç»ï¼æ°ç»ä¸çææå ç´ é½ä¸ºObjectç±»åã
public <T> T[] toArray(T[] a);
è¿ä¸ªæ¹æ³æListä¸çå ¨é¨å ç´ è¿åä¸ä¸ªç¸å大å°çæ°ç»ï¼æ°ç»ä¸çææå ç´ é½ä¸ºTç±»åã
Listå¦æ¤è®¾è®¡æ¯å 为Javaç¼è¯å¨ä¸å 许æ们newèåæ°ç»ãä¹å°±æ¯è¯´ä½ ä¸è½è¿ä¹å®ä¹ä¸ä¸ªæ°ç»ï¼
T arr=new T[size];
ä½æ¯ä½ å´å¯ä»¥ç¨T[]æ¥è¡¨ç¤ºæ°ç»ï¼èä¸å¯ä»¥ææ°ç»å¼ºå¶è½¬å为T[]ãæ¯å¦Listä¸çpublic <T> T[] toArray(T[] a)æ¯è¿ä¹å®ç°çï¼
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), size);
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
ä»ä¸é¢ä»£ç ä¸å¯ä»¥çå°ï¼å ä¸ºä½ ä¸ç¥éè¿ä¸ªæ°ç»çç±»åï¼ä½ å¿ é¡»éè¿åå°æºå¶å建è¿ä¸ªæ°ç»ï¼a.getClass().getComponentType()æ¹æ³æ¯åå¾ä¸ä¸ªæ°ç»å ç´ çç±»åï¼ã
æç»ï¼List转æ¢ä¸ºArrayå¯ä»¥è¿æ ·å¤çï¼
ArrayList<String> list=new ArrayList<String>();
String[] strings = new String[list.size()];
list.toArray(strings);
åè¿æ¥ï¼å¦æè¦å°æ°ç»è½¬æListæä¹åå¢ï¼å¦ä¸ï¼
String[] s = {"a","b","c"};
List list = java.util.Arrays.asList(s);
温馨提示:答案为网友推荐,仅供参考