泛型

【泛型 Generic】

参数化类型

 

为什么要使用泛型?

当我想做一个容器类型时,希望可以保存任意类型的数据,

往往会把存放的方法参数设置为Object类

取出方法的返回值也设置为Object类,

但是这样在使用时,无法保证存放和取出的类型是同一种类型

这样的话当我做强制类型转换时,就无法保证程序会正常运行

 

如果希望存放和取出的是同样的任意类型,

就必须要使用参数化类型来指定参数的类型,

这个技术就叫做泛型

 

 1. 泛型接口

占位符T,可以存放任意类型,传入的是什么类型,方法里面接收到的就是该类型,在编译的时候无法确定是什么类型,但是在运行时决定它的真实类型

 

 2. 泛型类

范例:定义泛型类

子类继承泛型类的写法

形式1:

在子类继续设置泛型

public class RecordDaoImpl<T> extends BaseDaoImpl<T> implements RecordDao {

 

形式2:

在子类不设置泛型,而在父类明确的定义一个泛型类型

public class RecordDaoImpl extends BaseDaoImpl<Record> implements RecordDao {

 

 3. 泛型方法

泛型方法不一定非要定义在支持泛型的类里面。

能够看懂泛型方法的标记就行了

 

 4. 通配符

 

?   匹配任意类型和T的区别是:T只能匹配一种类型?一般用于接收

? super A 匹配A的父类包括A(下边界)

? extends A 匹配A的子类包括A(上边界)(用的多)

 

 5. 类型推测(JDK7 新特性)

 

构造器不指定泛型,但是引用要指定泛型

 #6. 类型擦除

泛型技术是JDK5的新特性,并没有为这个技术修改JVM,

仅仅是修改了javac

就导致泛型技术仅仅在编译的一瞬间才生效,运行时没有效果

 

// 类型擦除时注意的地方

//以下2个方法无法重载,编译不通过,任意一个方法编译之后的泛型就没有了

public static void test(List<String> list) {

 

}

public static void test(List<Integer> list) {

}

应用:https://blog.csdn.net/qq_36194262/article/details/82735256

 

【链表】

 

 泛型在实际开发中,往往会用作容器类型的制作

 

 动态数组 ArrayList:可以用数组保存任意多数量的对象

但是动态数组有一个问题,当我们频繁的添加和删除对象时,往往会涉及到某一范围内的元素集体复制等操作

是一个非常效率低下的操作

 

 链表 LinkedList:保存任意多个数量的对象

 

 考虑:链表要如何实现呢?

  add() 已完成

  size() 已完成

  get() 已完成

  remove() 已完成

  set()

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值