Comparable 接口已经泛型化了,所以实现 Comparable 的对象声明它可以与什么类型进行比较。(通常,这是对象本身的类型,但是有时也可能是父类。)public interface Comparable{

public boolean compareTo(T other);

}

所以 Comparable 接口包含一个类型参数 T,该参数是一个实现 Comparable 的类可以与之比较的对象的类型。这意味着如果定义一个实现 Comparable 的类,比如 String,就必须不仅声明类支持比较,还要声明它可与什么比较(通常是与它本身比较):public class String implements Comparable{ ... }

现在来考虑一个二元 max() 方法的实现。您想要接受两个相同类型的参数,二者都是 Comparable,并且相互之间是 Comparable。幸运的是,如果使用泛型方法和有限制类型参数的话,这相当直观:public static > T max(T t1, T t2) {

if (t1.compareTo(t2) > 0)

return t1;

else

return t2;

}

在本例中,您定义了一个泛型方法,在类型 T 上泛型化,您约束该类型扩展(实现) Comparable。两个参数都必须是 T 类型,这表示它们是相同类型,支持比较,并且相互可比较。容易!

更好的是,编译器将使用类型推理来确定当调用 max() 时 T 的值表示什么意思。所以根本不用指定 T,下面的调用就能工作:String s = max("moo", "bark");

编译器将计算出 T 的预定值是 String,因此它将进行编译和类型检查。但是如果您试图用不实现 Comparable的 类 X 的参数调用max(),那么编译器将不允许这样做。

java comparable方法_JAVA 泛型 - ComparableT相关推荐

  1. java comparable方法_JAVA comparable的使用方法与实例

    comparable :是在你要排序的类中去实现comparable接口,也就是说你得在你要排序的类中先写一个方法用来声明你想让你类中的属性根据什么规则来排序.和Comparator不同,Compar ...

  2. java 类 方法 带泛型_java中的泛型类和泛型方法

    1.泛型是什么? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类. 可以在集合框架(Collection fram ...

  3. java arrays方法_Java工具类Arrays中不得不知的常用方法

    原标题:Java工具类Arrays中不得不知的常用方法 Arrays 数组操作集数组转List ---asList 这个被"普遍"称为数组转List的方法,可能是Arrays内大家 ...

  4. java clone方法_Java Calendar clone()方法与示例

    java clone方法 日历类clone()方法 (Calendar Class clone() method) clone() method is available in java.util p ...

  5. java void方法_Java对象类的最终void wait(long ms)方法,包含示例

    java void方法 对象类最终无效等待(长毫秒) (Object Class final void wait(long ms)) This method is available in java. ...

  6. java tostring方法_Java虚拟机如执行方法调用的(二)?

    虚方法调用 Java里所有非私有实例方法调用都会被编译成invokevirtual指令. 接口方法调用都会被编译成invokeinterface指令.这两种指令都属于Java虚方法的调用. 在大多数情 ...

  7. java peek方法_Java ArrayDeque peek()方法与示例

    java peek方法 ArrayDeque类peek()方法 (ArrayDeque Class peek() method) peek() Method is available in java. ...

  8. java double方法_Java Double类compare()方法与示例

    java double方法 双类compare()方法 (Double class compare() method) compare() method is available in java.la ...

  9. java 析构方法_java析构方法详解

    之前给大家介绍了一下java构造方法,那么下面要给大家讲到的就是java析构方法,下面一起通过文章来了解一下吧. 析构方法和构造方法不同,真好是相反的,在对象脱离其作用域的时候,系统自动执行析构方法. ...

最新文章

  1. vue2 切换路由时 页面滚动到顶部 用游览器返回时 记住上页的位置
  2. 增加行星轮减速后机械臂调试
  3. SAP UI5应用的sap-ui-core.js被加载之前,还有哪些js文件被加载了
  4. Docker中安装Jenkins实时发布.net core 项目(二)
  5. Fastformer:史上最强最快Transformer!清华、MSRA出品!
  6. [Google Guava]学习--新集合类型BiMap
  7. android代码设置drawable,Android:Textview 通过代码设置 Drawable
  8. 《遥感原理与应用》孙家抦版知识点总结(含简答题)——第三章
  9. 中国大学MOOC电影鉴赏题库(含答案)
  10. 极光推送java demo_极光推送JAVA代码示例
  11. 实用:Google Chrome(谷歌浏览器)键盘快捷键大全
  12. Java-学习-喜欢-品牌:互联网公司成为动物园,拟人化品牌形象真的那么有意思?...
  13. 为何Emacs和Vim被称为两大神器
  14. java苹果沙盒验证参数问题_java -苹果支付凭证校验
  15. 毫米和像素怎么换算_C#中毫米与像素的换算方法
  16. 进程资源图理解与化简
  17. neu ikobikob
  18. phpcms 专题功能
  19. 刷题记录:牛客NC15434wyh的迷宫
  20. Kernel_PCA算法

热门文章

  1. Matlab之基于MTI雷达生成表面杂波和目标回波(附源码)
  2. 天津商业大学计算机技术与科学,天津商业大学生物技术与食品科学学院
  3. java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID……
  4. 海尔U+与土曼为何能达成“不对称合作”?
  5. Linux服务器安装配置Redis
  6. Java开发环境概述
  7. Bootstrap Navbar
  8. 65动态版式标题Premiere Pro模板
  9. mysql 删除mul key_删除MySQL重复数据的方法
  10. 木木夕推荐:第一款产品《美柚》