Java 高级特性之泛型

何为泛型

正如字面意思,泛化的类型,指在编码时无法确定某一个具体的类型,需要先使用一个占位符(建议大写,全英),当运行时传入具体的类型来替换这一个泛型标记

为什么需要泛型

伪需求

假设我们需要一个列表去存 String 类型的数据,那这个结构的设计为

class MyListForString{
   
  String get();
  void set(Sring int)
}

然后,发现需要里一个列表去存取 Integer 类型的数据,就需要重新定义一个结构

class MyListForInteger{
   
  Integer get();
  void set(Integer int)
}

然后,我们需要一个列表存储 xx 类型的数据。。

用 Object 优化

这个需求抽出来,其实就是需要有一个列表结构,然后能够存储一个指定的类型(这个类型又可能会根据需要进行变化),并且需要能正确的取出对应的类型,现在,我们为了应对变化的需求,重复编写差不多的 MyListForXX

根据多态以及向上转型的知识点(不懂的 xdm 可以来看看我准备的前置知识点 Java 三大基础特性の多态),我们可以用 Object 优化为成下面的代码块

class MyList{
   
  Object get();
  void set(Object obj)
}

现在已经能做到通用性了,就是用起来,emm,得小心一点

MyList list = new MyList();
list.set(1);
list.set("1");
Integer a = (Integer)list.get();  // 代码中取出来的类型实际是 Object, 我们需要手动强制为存入时的类型
String s = (String)list.get();

正如伪代码演示的这样,我们存入数据的时候,没有限制,但是,取出来的话,就需要小心翼翼了,毕竟谁也不知道 list 中存入了什么类型的数据,或许,我们可以修改实例创建的描述来实现一点点毫无约束力的限制?

MyList listOnlyForInt = new MyList
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值