首页 > 其他分享 >KTV和泛型(1)

KTV和泛型(1)

时间:2022-10-10 11:32:34浏览次数:55  
标签:name KTV User 泛型 new getName String

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

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

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

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

List list = new ArrayList();

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

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

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

这种情况,也被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、user2和user3的结果就自然会是true。而user4的name属性字段事先没有设置任何值,所以Java也无法判断读出来的究竟是什么,结果自然就是true。

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

KTV和泛型(1)_泛型


或者这样:

KTV和泛型(1)_java_02


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

  • K/V(key/value)分别代表键值对中的键和值;
  • T(type)表示具体的类型;
  • E(element)代表Element;
  • ?表示不确定的类型;

还是拿刚才的例子说:

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

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


标签:name,KTV,User,泛型,new,getName,String
From: https://blog.51cto.com/u_15817148/5742980

相关文章

  • KTV和泛型(3)
    泛型除了KTV,还有一个让人比较疑惑的玩意,而且它就是用来表达疑惑的:?虽然通过泛型已经达到我们想要的效果了,例如:List<String>list=newArrayList<String>();这样就可以......
  • KTV和泛型(2)
    很多使用泛型的小伙伴,都会有一个疑惑:为什么有的方法返回值前带<T>、<K,V>之类的标记,而有的方法返回值前又什么都不带呢?就像这样://实体基类classEntity{publicS......
  • C#委托之一例看懂泛型委托
    以为委托在编程中频繁使用,所以微软为使开发者方便使用委托,省去繁琐的重复定义。给我们提供了三种定义好的泛型委托,分别是Action、Func和Predicate。下面分别介绍Action:......
  • Java 一个List泛型根据另一个List泛型的属性进行过滤
    这个需求是在批量入库的时候,进行批量校验用到的1.逻辑是传入List参数,需要入库2.根据List去查询库中是否存在3.用传入的List进行过滤,获取苦衷不存在的resList4.插入resLi......
  • 【Java基础】泛型概述、泛型方法、泛型接口、类型通配符及可变参数的使用
    目录​​一、泛型概述和好处​​​​二、泛型类​​​​三、泛型方法​​​​四、泛型接口​​​​五、类型通配符​​​​六、可变参数​​​​可变参数的使用​​一、泛型......
  • net中c#教程 list泛型的常用操作
    上一篇讲的是非常基础的string字符串操作,这在c#的应用非常广泛。今天深入一点,讲下List泛型的一些用法。对于泛型的增删改查操作,找本c#的基础教程书籍,看看就行了。   ......
  • 算法 玩转数据结构 2-6 使用泛型
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13411 1重点关注1.1泛型改造==转equals详见3  2课程内容见3 3......
  • C#委托总结 普通委托、泛型委托、匿名委托
     一、概念委托的本质也是一种类型,类似于Class这样。作用是将一个方法作为参数传递给另一个方法,关键字是delegate 二、委托的定义使用步骤第一步声明委托:publicdel......
  • Java泛型
    Java泛型本文源自https://www.yuque.com/qingkongxiaguang/javase/syy4rz#29e0f372欢迎大家去看b站这个Up主的Java视频https://www.bilibili.com/video/BV1Gv411T7pi?p=......
  • C++ 泛型(模板与容器)
    文章目录​​一、泛型的基本思想:​​​​函数模板的性质​​​​C++模版函数/类的语法​​​​类模板的性质​​​​二、C++STL简介​​​​2.1算法(algorithm)​​​​2.......