1. 泛型变量的类型限定

1.1. 实例

public static <T> T get(T t1,T t2) {  if(t1.compareTo(t2) >= 0);  // 编译错误  return t1;
} 

1.2. 因为, 在编译之前, 也就是我们还在定义这个泛型方法的时候, 我们并不知道这个泛型类型T, 到底是什么类型, 所以, 只能默认T为原始类型Object。所以它只能调用来自于Object的那几个方法, 而不能调用compareTo方法。

1.3. 可我的本意就是要比较t1和t2, 怎么办呢? 这个时候, 就要使用类型限定, 对类型变量T设置限定(bound)来做到这一点。我们知道, 所有实现Comparable接口的方法, 都会有compareTo方法。所以, 可以对做如下限定:

public static <T extends Comparable<T>> T get(T t1,T t2) {  // 添加类型限定  if(t1.compareTo(t2)>=0);  return t1;
}

2. 类型限定在泛型类、泛型接口和泛型方法中都可以使用, 不过要注意下面几点:

2.1. 不管该限定是类还是接口, 统一都使用关键字 extends

2.2. 可以使用&符号给出多个限定, 比如:

public static <T extends Comparable<T>&Serializable> T get(T t1,T t2)  

2.3. 如果限定既有接口也有类, 那么类必须只有一个, 并且放在首位置:

public static <T extends Object&Comparable&Serializable> T get(T t1,T t2)  

020_泛型变量的类型限定相关推荐

  1. Java泛型总结---基本用法,类型限定,通配符,类型擦除

    一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...

  2. C++ 中的类型限定符 类型限定符提供了变量的额外信息。

    类型限定符提供了变量的额外信息. 限定符 含义 const const 类型的对象在程序执行期间不能被修改改变. volatile 修饰符 volatile 告诉编译器不需要优化volatile声明的 ...

  3. java泛型程序设计——通配符类型+通配符的超类型限定

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 通配符类型+通配符的超类型限定 的知识: [1]通配符类型相关 1. ...

  4. Typescript类,泛型,各种类型工具

    一.TypeScript 类 一个类可以包含以下几个模块: 1.属性 1.1 类属性 1.2 实例属性 2.构造函数(在python中叫初始化函数) 该函数在类实例化时会被立即调用 3.方法(也是函数 ...

  5. Java 泛型的本质——类型擦除

    文章目录 简介 Java泛型的类型擦除的证明例子 类型擦除到边界 擦除的代价与使命 使用泛型不是强制的 泛型代码边界的动作 非泛型类库和泛型类库:字节码一模一样 擦除的补偿 泛型与工厂模式 泛型数组 ...

  6. Java 8新特性探究(6):泛型的目标类型推断

    简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法 ...

  7. 学习笔记9-C语言-传参、类型限定符、递归

    函数传参: 1.形参变量属于它所在的函数,出了该函数就不能使用 2.实参与形参之间都是以赋值的形式进行数据传递(值传递) 3.return 其实是把返回值数据放置到一个公共的区域(函数和函数调用者), ...

  8. C语言中的类型限定符有哪些?

    C语言中有一些关键字起到了限定的作用,他们被称为限定符,那么在C语言中共有几个限定符呢?他们的作用分别是什么呢?本文主要介绍C中4个限定符 1.const2.volatile3.restrict4._ ...

  9. C语言类型限定符(type specifier)(一)——volatile详细教程

    前言:C语言有几个类型限定符(type specifier),如C90中的const和volatile,C99中的restrict,C11中的_Atomic,除了const以外,很多书籍对于其他几个修 ...

最新文章

  1. const在函数声明中的应用(转)
  2. 我花了 8 小时,掌握了一下 Flutter | Flutter 中文站上线
  3. Boltzmann Machine 入门(1)
  4. 微型计算机常用的worm是,2010江西省计算机等级考试试题 二级C试题考试答题技巧...
  5. 计算机能够进行逻辑操作的部件是,第二章 计算机逻辑部件
  6. UOJ#269. 【清华集训2016】如何优雅地求和
  7. Android mvparms 踩坑
  8. 触摸屏:屏幕键盘(虚拟键盘)解决方案
  9. maven报错JAVA_HOME should point to a JDK not a JRE
  10. 大数据之路:阿里巴巴大数据实践
  11. excel等额本息计算房贷公式
  12. 工商管理学python_工商管理专业以数据分析师为目标怎么样?
  13. CentOS下使用命令行Web浏览器Links
  14. 【SpringBoot】38 个常用注解
  15. 树莓派改造成通用计算机,自制树莓派笔记本电脑,你也可以做到
  16. 解决click在ios反应慢的问题
  17. 算力网络中基于算力标识的算力服务需求匹配
  18. IBM x3690 x5服务器安装Debian Linux
  19. 漏洞解决方案-文件上传
  20. anaconda一次性更新所有安装库

热门文章

  1. Android 多媒体------相机
  2. [Android Traffic] 使用缓存来避免重复的下载
  3. 对于坐拥海量数据的金融企业来说,大数据治理意味着什么?
  4. android SDK manager 无法获取更新版本列表
  5. 答“我们的团队项目是否有大泥球?”
  6. lucene.net 应用资料
  7. 分段路由中的控制指的什么?—Vecloud
  8. 路由异常的起源-如何影响最终用户?——Vecloud微云
  9. fastjson 对象和json互转
  10. JAVA四种引用方式