遇到了同样的问题,解决了,看他讲的比较清楚,转过来。
Java中List转换为Array
2009-05-12 09:36
今天写代码遇到一个奇怪的问题,具体代码不贴出了,写一个简化的版本。如下: 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);
|
分享到:
相关推荐
- **Set转Array**: 与List相似,你可以先将Set转换为List,再将List转换为Array: ```java Set<String> set = ...; List<String> list = new ArrayList(set); String[] array = new String[list.size()]; list...
当处理XML文件时,有时我们需要将其内容转换为Java对象,如List,以便于操作和处理。本篇文章将深入探讨如何将XML转换为指定类型的List数组,并涉及多层数据结构的处理。 1. **Java XML解析库** 在Java中,有多种...
在 Java 中,集合类型的转换是非常常见的操作,例如将 List 转换为 Array、将 Array 转换为 List、将 Map 转换为 List 等等。今天,我们将详细介绍 Java 中 List、Array、Map、Set 等集合相互转换的方法。 List ...
在Java编程语言中,Array(数组)和List是两种常用的数据结构,它们各自有各自的特性和应用场景。然而,在实际开发中,我们常常需要在数组和列表之间进行转换,以适应不同的需求。本篇将深入探讨Java中如何实现Array...
### List转换成String数组 在Java编程语言中,经常需要将`List<String>`类型的数据转换为`String[]`数组类型,以便于进行某些特定的操作或适应某些方法的要求。本文将详细探讨这一转换过程,并通过几个具体的示例来...
下面将深入探讨如何在Java中实现对象数组向JSON的转换,并反过来将JSON字符串转换为Java对象数组,同时也会提及一些相关技术和代码示例。 ### Java对象数组转JSON 首先,我们来看如何将一个Java对象数组转换成JSON...
在这个示例中,`Arrays.asList()` 方法被用来将字符串数组转换为 `List<String>` 类型的列表。需要注意的是,通过这种方式得到的列表实际上是数组的一个视图,对列表进行修改会直接影响原数组。如果希望得到一个新的...
### List转换成String数组 在Java编程中,我们经常需要对集合进行操作,尤其是在处理大量字符串数据时。本文将详细介绍如何将一个`List<String>`类型的集合转换为`String[]`数组,并通过不同的方法来实现这一过程。...
在Java中,List接口提供了一个`toArray(T[] array)`方法,用于将List转换为指定类型的数组。这个方法需要一个参数,即目标类型的数组实例,数组的大小应等于List的大小。如果传入的数组大小小于List的大小,系统会...
在Java应用中,经常会遇到需要将Java对象或集合等数据结构转换为JSON字符串的需求。例如,在与Web服务交互时,通常会将Java对象序列化为JSON字符串以便于传输。 #### 二、核心类与方法介绍 在所提供的代码片段中,...
标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...
- **数据丢失**:当从Array转换到Set时,如果Array中有重复元素,Set会自动去除重复,因为Set不允许重复元素。 - **类型安全**:在进行转换时,确保源类型和目标类型匹配,否则可能会出现ClassCastException。 - ...
在上面的方法中,我们使用了 BeanUtil 工具类将 Java 对象转换为 XMLStreamReader,然后使用 StAXOMBuilder 将其转换为 OMElement。这样,我们就可以将 Java 对象转换为 OMElement,以便在 AXIS2 中使用。 AXIOM 还...
在Java编程语言中,`Array`和`Collection`之间的转换是常见的操作,特别是在处理数据结构时。本篇文章将深入探讨如何进行这些转换以及涉及到的复制(copy)深度问题。 首先,`Array`和`Collection`是Java中两种不同...
Java 数组转换为 List 是 Java 编程中一个常见的操作。List 是 Java 中的一种集合类型,用于存储多个元素,而数组是固定长度的元素集合。将数组转换为 List 可以提供更多的灵活性和便捷性。在本文中,我们将介绍两种...
`则将List转换回数组。 7. **泛型的类型擦除与转换**:泛型在编译时期进行类型检查,但在运行时类型信息会被擦除。因此,虽然在声明泛型时有类型限制,但实际操作时仍需注意类型转换。 8. **Object的转型**:所有...
Java作为服务器端开发的主流语言之一,如何高效地将JSON字符串与Java对象进行转换显得尤为重要。本文将详细介绍如何使用`json-lib`库来进行JSON字符串与Java对象之间的相互转换,并提供具体的代码示例。 #### 二、...
**将Java List转换为JSON:** - 直接使用`JSONArray.fromObject()`方法即可。 ```java List<String> list = new ArrayList(); list.add("first"); list.add("second"); JSONArray jsonArray = JSONArray.from...
当你从服务器接收到一个JSON格式的字符串,可能需要将其转换为Java对象以便于处理。这个过程通常称为反序列化。本文将详细探讨如何在Java中将JSON字符串转换为Java实体类。 首先,你需要引入一个JSON库,如Jackson...
在 Java 中,将数组转换为 List 是一个常见的操作。下面将详细介绍四种常用的方法,以便更好地理解和应用。 方法 1:使用 Arrays 类的 asList() 方法 使用 Arrays 类的 asList() 方法可以将数组转换为 List。该...