HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

泛型:参数化类型

基本概念

定义:
定义1:把类型参数化
定义2:例如:public class Generic<T>
此时的T便是泛型,

理解:
泛型是个数据类型,可以用T定义变量
参数化:

  • 将数据类型由原来的具体类型变成一个参数,(类似于方法中的变量参数,可以称为类型实参),
  • 在使用/调用时,传入具体的类型,(类型实参)。

目的:

  • 限制传入的参数类型,方便程序操作
  • 避免java.lang.ClassCastException异常
    (因为如果不限制传入的数据类型,可能传入任意数据,而数据使用时需要强制转化成目的类型,如果类型不匹配,强制转化可能报错。)

作用位置:
类,接口,方法

特点:

  • 如果未指定泛型类型,则默认为java.lang.Object。
  • Java中的集合框架所涉及的接口和类,大都是泛型接口和泛型类。
  • 利用泛型类、泛型接口的实现类创建对象,可以不指定泛型类型。
  • 泛型只在编译阶段有效,不会进入运行阶段(编译过程中检测泛型结果后,抹去相关信息,再运行)

泛型类:

  • 泛型类型参数只能是类类型,不能是简单类型
    • Generic genericInteger =new Generic(123); 对
    • Generic genericInteger =new Generic(123);
  • 不能 对确切的泛型类型使用instanceof操作
    • 错误:if(genericInteger instanceof Generic)
    • 正确:if(genericInteger instanceof Generic)
  • 泛型类不会自动封装,不会自动转化数据类型

基本操作

测试代码:

public class Generic<T> {
T key;
public Generic(T key) {
super();
this.key = key;
}
public T getKey() {
return key;
}
public void setKey(T key) {
this.key = key;
}
public static void main(String[] args) {
Generic<String> genericString =new Generic<String>("abc");
Generic<Integer> genericInteger =new Generic<Integer>(123);
System.out.println(genericInteger.getKey());
System.out.println(genericString.getKey());
Generic genericObject =new Generic("Object");
System.out.println(genericObject.getKey());
Generic g1 =new Generic(123);
Generic g2 =new Generic(12.3);
Generic g3 =new Generic('1');
System.out.println(g1.getClass());//获取该对象的数据类型
System.out.println(g2.getClass());
System.out.println(g3.getClass());
/*
* 结果:class Sdut.Generic
class Sdut.Generic
class Sdut.Generic
结论:泛型只在编程阶段有效
因此:不能 对确切的泛型类型使用instanceof操作
例如:if(genericInteger instanceof Generic<Integer>) 错误
正确:if(genericInteger instanceof Generic)
* */
System.out.println(g3.getClass()==g2.getClass());
//结果:true,说明数据类型相同
}
}

泛型的上下边界

在使用泛型的时候,可以为传入的泛型类型实参进行上下边界的限制。
例如:实参只准传入某类型父类或子类。
例如:

public class Generic<T extends Number> {//定义了上边界Number类(数值类)
//则传入String类型的数据报错
}

附:Number类的子类

  • AtomicInteger, AtomicLong, BigDecimal, BigInteger,
  • Byte, Double, Float, Integer, Long, Short

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/15552438.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(272)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起