看一下java泛型的设计.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
看一下java泛型的设计

从零开始来看一下Java泛型的设计泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。作者:ziwenxie来源:ziwenxie|2017-03-03 10:37?收藏??分享引言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。泛型基础泛型类我们首先定义一个简单的Box类:public class Box { private String object; public void set(String object) { this.object = object; } public String get() { return object; }}这是最常见的做法,这样做的一个坏处是Box里面现在只能装入String类型的元素,今后如果我们需要装入Integer等其他类型的元素,还必须要另外重写一个Box,代码得不到复用,使用泛型可以很好的解决这个问题。public class BoxT { // T stands for Type private T t; public void set(T t) { this.t = t; } public T get() { return t; }}这样我们的Box类便可以得到复用,我们可以将T替换成任何我们想要的类型:BoxInteger integerBox = new BoxInteger();BoxDouble doubleBox = new BoxDouble();BoxString stringBox = new BoxString();泛型方法看完了泛型类,接下来我们来了解一下泛型方法。声明一个泛型方法很简单,只要在返回类型前面加上一个类似K, V的形式就行了:public class Util { public static K, V boolean compare(PairK, V p1, PairK, V p2) { return p1.getKey().equals(p2.getKey()) p1.getValue().equals(p2.getValue()); }}public class PairK, V { private K key; private V value; public Pair(K key, V value) {this.key = key;this.value = value; } public void setKey(K key) { this.key = key; } public void setValue(V value) { this.value = value; } public K getKey() { return key; } public V getValue() { return value; }}我们可以像下面这样去调用泛型方法:PairInteger, String p1 = new Pair(1, apple);PairInteger, String p2 = new Pair(2, pear);boolean same = Util.Integer, Stringcompare(p1, p2);或者在Java1.7/1.8利用type inference,让Java自动推导出相应的类型参数:PairInteger, String p1 = new Pair(1, apple);PairInteger, String p2 = new Pair(2, pear);boolean same = Upare(p1, p2);边界符现在我们要实现这样一个功能,查找一个泛型数组中大于某个特定元素的个数,我们可以这样实现:public static T intcountGreaterThan(T[] anArray, T elem) {int count = 0; for (T e : anArray) if (e elem) // compiler error ++count; return count;}但是这样很明显是错误的,因为除了short, int, double, long, float, byte, char等原始类型,其他的类并不一定能使用操作符,所以编译器报错,那怎么解决这个

文档评论(0)

561190791 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档