java 泛型 数组元素不能是参数化类型_java泛型

对于泛型,以前编程时也使用过,但对其了解并不深入,主要就是使用在List、Map这类集合上使用。好像没有刻意去学,就自然而然的就会了。这次学了视频教程后,觉得对其应用了解的深入了些,所以对泛型做个知识整理。

泛型:泛型是java 1.5中定义的一种新的数据类型,是一种参数化的类,也叫“类中类”,它是面向对象的扩展。通过泛型可以定义类型安全的数据类型,它的最显著应用就是创建集合类,可以约束集合类内的元素类型,java中比较常用的是Map和Collection 。

Java中泛型的原理:泛型是提供给java编译器使用的可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会支除掉类型信息,使程序运行效率不受影响,对于参数化的泛型类型。getclass()方法的返回值和原始值类型完全一样,由于编译器生成的字节码会去掉泛型的类型信息,只要能跳过编译器,还是可以向泛型集合中添加其它类型的数据的。

泛型的优点 :

1、使用泛型的性能高,不需要装箱和拆箱的操作

2、泛型的另一个优点是类型安全。泛型集合对它所存储的对象做了类型的约束,在没有跳过编译器之前它是不允许非泛型集合所存储的数据类型添加到泛型集合中去的。

泛型的特点:

1、参数化类型与原始类型兼容

如:参数化类型与原始类型的对象,编译器报告警告

Collection c=new Vector();

原始类型可以引用一个参数化类型的对象,编译器报告警告

Collection c=new Vector();

2、参数化类型不考虑类型参数的继承性

Vector v=new Vector()//错误,参数类型不能继承

3、在创建数组实例时,数组的元素不能使用参数化的类型

Vector vectorlist[]=new Vector[10];//错误,数组的元素不能使用参数化类型

4、泛型中的?通配符:

(1)、使用?通配符可以引用其它各种参数化的类型,使用?通配符定义的变量主要做引用 ,可以调用与参数化类型无关的方法,不能调用与参数化有关的方法。

如: 定义一个方法

publci void testCollection(Collection> c)

{

c.add("element");//这样编译器会报错,添加元素与参数化类型有关

System.out.print(c.size());//size方法与参数类型无关,不会报错

}

(2)、泛型中?通配符的限定,限定通配符总是包括自己的

限定?通配符的上边界

Vector extends Number> x=new Vector();//表示这个泛型的参数化类型只能是Number的子类和Number自己

限定?通配符的下边界

Vector supper Integer> x=new Vector();//表示 这个泛型的参数化类型中能是Integer或它的父类

除了使用extends限定符外,在定义泛型时也可以使用&符号 来指定多个边界

5、泛型的应用

(1)、自定义泛型方法,定义方法时要用来声明这个类型,放在方法的所有修饰符之后和方法的返回值之前,普通方法、构造方法、静态方法都可以使用泛型的方式来定义。

public  T send(T t)//这里的T代表任意类型来,但是在传实际参数时必须是引用 类型

{

return t;

}

(2)、自定义泛型类:如果类的实例对象中有多处都要用到同一个泛型参数 ,即这些地方引起 的泛型类型要保持同一个实例类型时,这时候就可以采用自定义泛型类,自定义泛型的语法格式如下

public class Generic

{

public void method( T t){}

}

注意:对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值