`
ayis
  • 浏览: 186241 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java泛型在list.toArray()处的难堪

    博客分类:
  • java
阅读更多
import java.util.ArrayList;
import java.util.List;

public class Test {

	public static void main(String[] args) {
		
		List<String> list = new ArrayList<String>(); 
		list.add("1"); 
		list.add("2"); 
		String[] tt =(String[]) list.toArray(new String[0]); 

	}

}

    这段代码是没问题的,但我们看到String[] tt =(String[]) list.toArray(new String[0]) 中的参数很奇怪,然而去掉这个参数new String[0]却在运行时报错。。。

     list.toArray()返回的是一个Object[]类型的,按理说,该容器中的元素已经用泛型限制了,那里面的元素就应该被当作泛型类型的来看了,然而在目前的java中却不是的,当直接String[] tt =(String[]) list.toArray()时,运行报错。原因是容器的类型已经强制转过来了,然而容器中的元素类型却没有转过来,所以运行时报错。

7
2
分享到:
评论
9 楼 kevinfuture 2015-05-28  
java泛型中有泛型数组这样的说法吗?
8 楼 cl1154781231 2012-12-15  
mercyblitz 写道
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        String [] nums = new String [list.size()];
        list.toArray(nums);

这样就没有问题了!


可以。new String[0]也可以。
7 楼 crabdave 2010-12-20  
建议这个问题还是查一下API吧!
toArray(T[] a) 返回以正确顺序包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

注明类型不就完了么?
String[] tt =list.toArray(new String[0]);这样也挺好啊!
为什么还得转换后再赋值?
6 楼 hunnuxiaobo 2010-04-30  
mercyblitz 写道
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        String [] nums = new String [list.size()];
        list.toArray(nums);

这样就没有问题了!

我今天做项目也遇到这个问题,总报String cannot cast to Object异常。我试了一下,3楼的办法可行,谢谢!
5 楼 beefcow 2009-08-11  
不错

感谢
4 楼 mercyblitz 2008-09-25  
mercyblitz 写道

List&lt;String&gt; list = new ArrayList&lt;String&gt;();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add("1");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add("2");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String [] nums = new String [list.size()];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.toArray(nums);这样就没有问题了!

我也看错了!

引用
list.toArray()返回的是一个Object[]类型的,按理说,该容器中的元素已经用泛型限制了,那里面的元素就应该被当作泛型类型的来看了,然而在目前的java中却不是的

考虑下面的代码:
List<String> strList = new ArrayList<String>();
        strList.add("1");
        strList.add("2");
        List<Integer> intList = new ArrayList<Integer>();
        intList.add(3);
        intList.add(4);
        List<Object> objList = new ArrayList<Object>();
        /** 添加String List 和Integer List 对象进入Object List */
        objList.addAll(strList);
        objList.addAll(intList);
       
        Object [] objs = objList.toArray();
        for ( Object obj : objs )
            System.out.println(obj);


3 楼 mercyblitz 2008-09-25  
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        String [] nums = new String [list.size()];
        list.toArray(nums);

这样就没有问题了!
2 楼 nowind 2008-09-25  
sinosaga 写道

不会出错啊。


你没看明白
1 楼 sinosaga 2008-09-25  
不会出错啊。

相关推荐

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    Java泛型编程指南.pdf

    Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南

    1.java泛型定义.zip

    1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....

    2.java定义泛型类.zip

    2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip...

    3.java实例化泛型类.zip

    3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....

    浅析Java泛型的使用.pdf

    浅析Java泛型的使用.pdf

    Java泛型学习笔记.pdf

    Java泛型学习笔记.pdf

    05-java泛型的使用.doc

    05-java泛型的使用.doc

    Java泛型单元试题.html

    精选java关于泛型的原理,应用和面试题,包含所有泛型考点。例如,泛型的概念,类型,实例化,容易混淆的用法。每一道题附上答案,方便理解考试要点。

    java泛型详解.pdf

    java泛型详解.pdf

    JVM如何理解Java泛型类.doc

    JVM如何理解Java泛型类.doc JVM如何理解Java泛型类.doc

    java泛型深入.pdf

    java泛型深入.pdf

    [Java泛型和集合].(Java.Generics.and.Collections).文字版

    [Java泛型和集合].(Java.Generics.and.Collections).Maurice.Naftalin&amp;Philip.Wadler.文字版.

    Java泛型使用详细分析.pdf

    Java泛型使用详细分析.pdfJava泛型使用详细分析.pdfJava泛型使用详细分析.pdfJava泛型使用详细分析.pdfJava泛型使用详细分析.pdf

    Java泛型和反射.ppt

    泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?...在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。

    泛型JAVA指南.pdf

    泛型JAVA指南.pdf

Global site tag (gtag.js) - Google Analytics