Duplicate :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
JDK-8176893 :
|
FULL PRODUCT VERSION : java version "1.5.0_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_02-b09) Java HotSpot(TM) Client VM (build 1.5.0_02-b09, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Linux itppc27 2.4.19-4GB #1 Mon Aug 4 23:38:42 UTC 2003 i686 unknown A DESCRIPTION OF THE PROBLEM : The Collection documentation claims that collection.toArray() is "identical in function" to collection.toArray(new Object[0]); However, the implementation of Arrays.asList does not follow this: If created with an array of a subtype (e.g. String[]), its toArray() will return an array of the same type (because it use clone()) instead of an Object[]. If one later tries to store non-Strings (or whatever) in that array, an ArrayStoreException is thrown. Either the Arrays.asList() implementation (which may return an array of component type not Object) or the Collection toArray documentation (which does not allow argumentless toArray() to return arrays of subtypes of Object) is wrong. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Execute code. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - [Ljava.lang.Object;@10b62c9 [Ljava.lang.Object;@82ba41 ACTUAL - [Ljava.lang.String;@10b62c9 [Ljava.lang.Object;@82ba41 REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- import java.util.*; public class ToArray { public static void main(String[] args) { List l = Arrays.asList(args); System.out.println(l.toArray()); System.out.println(l.toArray(new Object[0])); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : Only use toArray(Object[]). ###@###.### 2005-04-25 12:45:46 GMT
|