Arrays and generics 数组和通用

本文探讨了Java中泛型与数组的交互方式,包括如何正确创建泛型数组、使用泛型类与方法处理数组,以及避免编译错误的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、一般类数组,可以建立对象

             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;

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值