一、一般类数组,可以建立对象
1、建立一个类:ClassParameterTest
2、 通过建立这个类的对象,使用这个类:ClassParameterTest[] t=new ClassParameterTest[10]
这个对象表示是一个袋子,能装多少(10),装什么(只能是ClassParameterTest对象,即对象的地址,指向堆)
二、Arrays and generics 数组和通用:不能建立一个带参数类的数组对象。
1、 但是:对于带参数的类数组,不能建立对象,you cannot instantiate arrays of
parameterized types:
ClassParameterTest<T>[] t=new ClassParameterTest<T>[10];//错,编译不通过。
2 、对带参数的类,如何使用?
只能通过袋子的东西(Integer)建立一个数组:由参数类建立对象,调用方法返回袋子的所有东西(Integer 数组):However, you can parameterize the type of the array itself:
比如:1、Integer[] ints2 = new ClassParameterTest<Integer>().f(ints);
package arrays; //类参数。 class ClassParameterTest<T> { public T[] f(T[] arg) { return arg; } } //方法参数,方法返回值前面加<T> class MethodParameterTest { public static <T> T[] f(T[] arg) { return arg; } } public class ParameterizedArrayType { public static void main(String[] args) { Integer[] ints = { 1, 2, 3, 4, 5 }; //固定值,袋子就装这些int值 Double[] doubles = { 1.1, 2.2, 3.3, 4.4, 5.5 };//固定值,袋子就装这些Double值 Integer[] ints2 = new ClassParameterTest<Integer>().f(ints); Double[] doubles2 = new ClassParameterTest<Double>().f(doubles); ints2 = MethodParameterTest.f(ints); doubles2 = MethodParameterTest.f(doubles); } } |
3、上面的方法参数好于类参数。
理由:数组的内容,可以各种各样,这样根据不同内容,你需要多次instantiate 一个带不同类型参数的类。
方法参数:里面的方法设着Static 类方法,只要类第一次调用时保存在method table 里。
三、通用类型不能建立对象,但是可以建立一个连接,建立一个非通用类,通过转换两个连在一起
it will let you create a reference to such an array.you can create an array of the non-generified type and cast it;
如:ClassParameterTest<Integer> ints2;
List[] la = new List[10];
ls = (List<String>[]) la;