当前位置:编程学习 > JAVA >>

java 泛型数组怎么实例化?

如题

public class Test<T>(){
public Test(){
T[]= new T[10];//这是错误的.要怎么样才能够实例化了?
T[]=???;
}
}
--------------------编程问答-------------------- 高手来啊 --------------------编程问答-------------------- ArrayList<T> t = new ArrayList<T>();
泛型没办法new数组 --------------------编程问答-------------------- 找到解决的办法了

T[] ts =(T[]) new Object[10];
--------------------编程问答-------------------- 没办法实例化,看看thinking in java就知道了。楼主找到的方法不可靠,隐含着ClassCastException --------------------编程问答-------------------- T[]= new T[10];
没变量名。 --------------------编程问答--------------------
引用 4 楼 crud0906 的回复:
没办法实例化,看看thinking in java就知道了。楼主找到的方法不可靠,隐含着ClassCastException


请问在什么情况下会出现这样的异常了? --------------------编程问答-------------------- 感觉用集合安全点  --------------------编程问答-------------------- Java不支持泛型数组 LZ放弃吧
4L说的我可以举个例子

public class TestArray {
    public static void main(String[] args) {
        String[] strings = {
                        "a", "b", "c"
        };

        Object[] objs = strings;
        objs[0] = new Integer(1);
    }
}


常规情况下 使用数组应该避免类型转换 虽然编译没有出错 但是数组的实际类型是不会改变的
泛型的作用是限制类型 难免会出现<? extends Object>这种类型 这种类型的话你想让这个数组如何定义? --------------------编程问答-------------------- 学习了。。。以后会注意的。。。 --------------------编程问答-------------------- 和楼主共同学习! --------------------编程问答--------------------
引用楼主 jlj493509534 的回复:
如题
Java code

public class Test<T>(){
public Test(){
T[]= new T[10];//这是错误的.要怎么样才能够实例化了?
T[]=???;
}
}


1、Java中目前没有泛型数组这个概念。
2、数组本身类似于一个集合,在定义声明及初始化时已经严格的规定好了里面对象的类型,故而无需再进行泛型的 约束了。
3、数组没有实例化的概念,应该是定义和初始化。
3、你在进行数组的声明时语法也不规范。 假如 T 为数组名,则应该是 Type[] T = new Type[length];或 Type[] T = new Type[length]{members};或 Type[] T = {members}。假如 T 为类型,则应该是
T[] name = new T[length];或 T[] name = new T[length]{memebers};或 T[] name = {members};

虽然你犯了错误,但大家研究一下也对我们有所帮助,至少使头脑中的一些理论和概念经过了淬火。 --------------------编程问答-------------------- T[] T= new T[10]; --------------------编程问答-------------------- T t =new T(); --------------------编程问答-------------------- 实际我要做的就是将一个泛型约束的集合转化为该泛型的数组?

List<T> list = new ArrayList<T>();
//这个泛型T数组必须被实例化,不然下面的toArray会出现NullPointException,所以怎么样才能够将泛型数组实例化
T [] t =null;
t = list.toArray(t);
--------------------编程问答--------------------
引用 14 楼 jlj493509534 的回复:
实际我要做的就是将一个泛型约束的集合转化为该泛型的数组?
Java code

List<T> list = new ArrayList<T>();
        //这个泛型T数组必须被实例化,不然下面的toArray会出现NullPointException,所以怎么样才能够将泛型数组实例化
        T [] t =null;
        t = list.toArray(……

返回Object[]强转吧,你原本就是T类型数组,不可能抛异常
toArray里面需要用到T[]的实例获取Class对象,没其他办法
  public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    } --------------------编程问答--------------------
引用 7 楼 caishaolang 的回复:
感觉用集合安全点


顶 --------------------编程问答--------------------
引用 16 楼 xzxw1115 的回复:
引用 7 楼 caishaolang 的回复:

感觉用集合安全点




问题是我就要将他转化为数组啊? --------------------编程问答--------------------


T[]t = new T[10];


T是对象就对了 --------------------编程问答-------------------- 泛型数组最好还是用集合代替,如果用强制类型转化来委婉的实现效果,就失去了使用泛型的意义了。

我提供一个方法:

public abstract class Test<T>{
T[] array;
public Test(){
array = getArray();
}
public abstract T[] getArray();
}


public class Test1 extends Test<具体的类型>{
@Override
public 具体的类型[] getArray(){
return new 具体的类型[100];
};
} --------------------编程问答-------------------- 可以参考jdk中ArrayList的处理方法!!
网上看到一篇文章,讲得有点门道:http://soft.chinabyte.com/database/9/12282009.shtml
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,