有关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,会有警告,但不是错误。

你可以这个声明
 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就好了,两者区别就是数据结构不同,一个用数组,一个用链表。
引用:
Quote: 引用:


class Array<T>{
private T[]arrays;
public T[] getArrays() {
return arrays;
}
}

这样算么


我只是想实现这样的功能而已。。。。

package genericsarrays.main;

import java.util.*;

public class GenericsArrays {

public static void main(String[] args) {
// TODO 自动生成的方法存根
LinkedList<String>[] st=new LinkedList[10];
st[0]=new LinkedList<String>();//从代码中就可以看出之后要存的是String类型
st[0].add("ASD");
String s=st[0].getFirst();//不用做强制类型转换
System.out.println(s);
}
/* public void f(){
LinkedList[] st=new LinkedList[10];
st[0]=new LinkedList();
st[0].add("ASD");
String s=st[0].getFirst();不能自动的从 Object 转换为 String
System.out.println(s);
}*/
}

至于你的这个代码,原谅我才刚学java,不是很理解。但是我还是觉得应该在类构造器初始化数组,或者定义一个方法得到初始化数组,类似于这样(stackoverflow看到的):

public class GenSet<E> {

    private E[] a;

    public GenSet(Class<E> c, int s) {
        // Use Array native method to create array
        // of a type only known at run time
        @SuppressWarnings("unchecked")
        final E[] a = (E[]) Array.newInstance(c, s);
        this.a = a;
    }

    E get(int i) {
        return a[i];
    }
}