有关java泛型数组的有关问题,求指点
有关java泛型数组的问题,求指点
LinkedList[] li=new LinkedList[20];
li[9]=new LinkedList();
li[9].add("ASD");
以上代码总是提示要参数化,但是这是泛型数组要怎么参数化啊。我去网上查了,好像是java不支持这样的泛型数组,那要达到上述三行代码的效果是不是有那种替代的代码呢?
------解决思路----------------------
泛型主要解决的是1、解决向集合中安全存放元素的问题;2、解决从集合中取元素时需要强转的问题
你看API或者源代码 类名是LinkedList<E>,参数化泛型就是要将E实例化,比如LinkedList<String>,意思是这个LinkedList里存放的是String类型。直接使用LinkedList,会有警告,但不是错误。
你可以这个声明
------解决思路----------------------
楼主,泛型是一个编译时期的概念,在运行时是不存在的。它仅仅支持使用泛型过的引用在编译期检查类型,在运行时没有任何检查手段。如果你听说过类型擦除就会了解了。
由上可知,在实际生成的对象中是不存在泛型信息的,所以我们不能生成泛型数组。但是我们可以使用一个泛型引用来引用产生的数组,这样就能使用它提供的类型检查功能了。赋值时的类型转换可以使用SuppressWarinings注解来去掉那个警告信息(这样做反而是安全的)。
当然。泛型是一个比较脆弱的机制,不提供强制检查,需要程序员自觉使用。下面这段代码能体现出一些这种特性:
它运行时不会报错。
------解决思路----------------------
泛型本身就是基于多态实现,换而言之,肯定存在类型转换,只不过不要求编程人员显式的类型转换而已。
而你的目的我并没有理解,既然要实现这样的功能,那你代码都写出来了,不就是已经实现了么?如果你非要用数组实现,那就把LinkedList换成ArrayList就好了,两者区别就是数据结构不同,一个用数组,一个用链表。
LinkedList[] li=new LinkedList[20];
li[9]=new LinkedList();
li[9].add("ASD");
以上代码总是提示要参数化,但是这是泛型数组要怎么参数化啊。我去网上查了,好像是java不支持这样的泛型数组,那要达到上述三行代码的效果是不是有那种替代的代码呢?
------解决思路----------------------
泛型主要解决的是1、解决向集合中安全存放元素的问题;2、解决从集合中取元素时需要强转的问题
你看API或者源代码 类名是LinkedList<E>,参数化泛型就是要将E实例化,比如LinkedList<String>,意思是这个LinkedList里存放的是String类型。直接使用LinkedList,会有警告,但不是错误。
你可以这个声明
LinkedList<LinkedList<String>> li = new LinkedList<LinkedList<String>>();
------解决思路----------------------
楼主,泛型是一个编译时期的概念,在运行时是不存在的。它仅仅支持使用泛型过的引用在编译期检查类型,在运行时没有任何检查手段。如果你听说过类型擦除就会了解了。
由上可知,在实际生成的对象中是不存在泛型信息的,所以我们不能生成泛型数组。但是我们可以使用一个泛型引用来引用产生的数组,这样就能使用它提供的类型检查功能了。赋值时的类型转换可以使用SuppressWarinings注解来去掉那个警告信息(这样做反而是安全的)。
当然。泛型是一个比较脆弱的机制,不提供强制检查,需要程序员自觉使用。下面这段代码能体现出一些这种特性:
@SuppressWarnings("unchecked")
LinkedList<String>[] l = new LinkedList[10];
LinkedList<Integer>[] lx = (LinkedList[])l;
l[0] = new LinkedList<>();
l[0].add("ASD");
lx[0].add(1);
System.out.println(lx[0].get(1).intValue());
System.out.println(lx[0].get(0));
它运行时不会报错。
------解决思路----------------------
泛型本身就是基于多态实现,换而言之,肯定存在类型转换,只不过不要求编程人员显式的类型转换而已。
而你的目的我并没有理解,既然要实现这样的功能,那你代码都写出来了,不就是已经实现了么?如果你非要用数组实现,那就把LinkedList换成ArrayList就好了,两者区别就是数据结构不同,一个用数组,一个用链表。