为了账号安全,请及时绑定邮箱和手机立即绑定

KTV和泛型(1)

标签:
Java

说起KTV恐怕没几个人不知道的虽然这玩意没有过去那么火热了但喝了酒之后再去飙几个高八度的爆破音还是蛮爽的 

Java里面也有一个基础特性用到了KTV——泛型

泛型它的作用就是字面意思宽泛的类型怎么个宽泛法呢

在没有泛型时,假设李雷写了一句这样的代码

List list = new ArrayList();

这句代码,除了李雷之外谁都不能一眼看出list中保存的到底是哪种数据类型

那么当你接手这样的代码时就只能在8种基本数据类型8种封装类型和String类型之间挨个试并且这还只是一行代码哦如果项目稍大一些可能会有上百行这样的代码哦

你这时心里头肯定有一万头CNM跑过

这种情况也被Java的缔造者们注意到了这毕竟是他们自己遗留下来的Bad Smell」。

于是他们在JDK 1.5中加入了这个叫泛型的东西,也就是说不仅数据本身是参数,数据类型也可以被指定为参数这话有点轴先不管它)。它的目的就是要使代码能够应用于使用的时候不知道是什么类型的场景

举个例子

public class User<K> {
    private K name;

    public K getName() {
        return name;
    }

    public void setName(K name) {
        this.name = name;
    }

    public static void main(String[] args) {
        User user1 = new User();
        user1.setName("xiangwang");
        System.out.println(user1.getName() instanceof String);

        User user2 = new User();
        user2.setName(123456);
        System.out.println(user2.getName() instanceof Integer);

        User user3 = new User();
        user3.setName(123.456);
        System.out.println(user3.getName() instanceof Double);

        User user4 = new User();
        System.out.println(user4.getName() instanceof Double);
    }
}


由于在getName()之前调用过setName()所以当判断设置的类型是否是字符串整数和浮点时user1、user2user3的结果就自然会是trueuser4name属性字段事先没有设置任何值所以Java也无法判断读出来的究竟是什么结果自然就是true

说了这么多,「泛型长成这样

https://img1.sycdn.imooc.com/6340b93d00011d3c06890188.jpg

 


或者这样

https://img1.sycdn.imooc.com/6340b9480001133c06590302.jpg

 


本质上KT、V、E?这些字母没什么区别,只不过是编码时一种约定俗成的东西比如T ,可以换成A-Z之间任何一个字母通常情况下,KT、V、E?是这样约定的

K/V(key/value)分别代表键值对中的键和值

T(type)表示具体的类型

E(element)代表Element

?表示不确定的类型

还是拿刚才的例子说

List<String> list = new ArrayList<String>();

如果李雷交给你这样的代码那么你就可以知道他在list列表里存放的都是String类型所以你就可以放心大胆地存取String类型的数据了绝不会报错这个Java向你可以保证



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消