首页 > 编程知识 正文

list对象转string数组,java list转json

时间:2023-05-05 09:13:54 阅读:129995 作者:65

ArrayList list=new ArrayList (;

String strings[]=(String [] ) list.toArray (;

我个人认为这样写代码没有任何问题,编译也没有问题。 但是,在具体运行时报告异常的情况如下。 exceptioninthread ' main ' Java.lang.classcastexception : [ ljava.lang.object;

但是,这样写没有问题:

ArrayList list=new ArrayList (;

string strings [ ]=new string [ list.size ();

for(intI=0,j=list.size ); I

strings[I]=list.get(I;

}

对于这一现象,Java允许向上和向下转换,但此转换是否成功取决于Java虚拟机中此对象的类型。 Java虚拟机存储每个对象的类型。 数组也是对象。 数组类型为[Ljava.lang.Object。 [显然,将[Ljava.lang.Object转换为[Ljava.lang.String是不可能的。 这是向下广播,虚拟机仅存储这是Object数组,并不保证数组中的元素是字符串,因此此转换不会成功。 数组中的元素是元素的引用,而不是存储的特定元素,因此数组中的元素类型仍然存储在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可以通过两种方法将其转换为阵列。

公共对象[ ] to array (;

此方法将List中的所有元素返回相同大小的数组。 数组中的所有元素都是Object类型。

publict[]toArray(t[]a );

此方法将List中的所有元素返回到大小相同的数组中。 数组中的所有元素都是t型。

List之所以这样设计,是因为Java编译器不允许new类型数组。 也就是说,数组不能这样定义。

T arr=new T[size];

但是,可以用T[]表示数组,可以强制将数组转换为T[]。 例如,List的公共t [ ] to array (t [ ] a就是这样实现的。

publict[]toarray(t[]a ) {

if(a.Lengthsize ) )。

a=(t ) ) java.lang.reflect.Array。

newinstance(a.getclass ().getComponentType )、size );

system.arraycopy(elementdata,0,a,0,size );

if(a.Lengthsize ) )。

a[size]=null;

返回a;

}

从上面的代码可以看出,由于不知道此数组的类型,因此需要在反射机制中创建此数组。 ((a.getClass ) ).getComponentType ) )方法获取数组元素的类型。

最终,将List转换为Array后,可以执行以下操作:

ArrayList list=new ArrayList (;

string [ ] strings=new string [ list.size (];

list.to array (字符串);

相反,如何将数组转换为List? 如下所示。

String[] s={'a '、' b '、' c'};

list list=Java.util.arrays.as list (s;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。