`
ayis
  • 浏览: 187201 次
  • 性别: 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...

    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泛型单元试题.html

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

    浅析Java泛型的使用.pdf

    例如,你可以将一个Integer[]赋值给Number[],但在泛型中,不能将List赋值给List,因为这可能会导致类型安全问题。下面的代码示例展示了这种类型安全问题: ```java List&lt;Integer&gt; list1 = new ArrayList(); List...

    Java泛型学习笔记.pdf

    Java泛型是Java语言提供的一种编程特性,旨在支持在编译时期进行类型检查和类型消除,使得编写的代码在不放弃类型安全的前提下,具有更好的通用性和复用性。学习Java泛型能够帮助我们更好地编写和使用通用的类、接口...

    05-java泛型的使用.doc

    Java 泛型是一种强大的特性,它允许在编程时指定容器(如列表、集合或映射)的元素类型,从而提供类型安全性和代码简洁性。在Java中,泛型是通过在类、接口或方法声明中使用类型参数来实现的。这使得开发者能够限制...

    java泛型详解.pdf

    java泛型详解.pdf

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

    **Java泛型** 是自Java 5引入的一种机制,它允许在类、接口和方法声明中使用类型参数,以实现更强大的类型检查和更少的类型转换。泛型的主要优点包括: 1. **类型安全**:编译时可以检查错误,避免了运行时...

    Java泛型使用详细分析.pdf

    Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的简介 泛型是 Java 5 中...

    Java泛型的用法及T.class的获取过程解析

    Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析。 一、泛型的基本概念 泛型是Java 5中...

    3个泛型项目源码.rar

    泛型在编程领域中是一种强大的工具,特别是在C#这样的面向对象语言中,它极大地提高了代码的灵活性、可读性和复用性。这个"3个泛型项目源码.rar"压缩包包含的三个项目,无疑为学习和理解泛型在实际项目中的应用提供...

    java泛型深入.pdf

    泛型在Java集合框架中有着广泛的应用,例如在`Collection`接口、`List`、`Set`等接口的实现类中大量使用了泛型。 总之,深入理解Java泛型能够帮助开发者编写更安全、更健壮的代码。通过掌握泛型的原理和细节,...

    Java泛型和反射.ppt

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

    Java中的泛型简析实战.zip

    Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...

Global site tag (gtag.js) - Google Analytics