JAVA 泛型

命名类型参数 推荐的命名约定是使用大写的单个字母名称作为类型参数。这与 C++ 约定有所不同(参阅 附录 A:与 C++ 模板的比较),并反映了大多数泛型类将具有少量类型参数的假定。对于常见的泛型模式,推荐的名称是:  K —— 键,比如映射的键。  V —— 值,比如 List 和 Set 的内容,或者 Map 中的值。  E —— 异常类。  T —— 泛型。 

类型通配符 假设您具有该方法: 

1

void printList(List l) {

2

for (Object o : l)

3

System.out.println(o);

4

}

上面的代码在 JDK 5.0 上编译通过,但是如果试图用 List<Integer> 调用它,则会得到警告。出现警告是因为,您将泛型(List<Integer>)传递给一个只承诺将它当作 List(所谓的原始类型)的方法,这将破坏使用泛型的类型安全。  如果试图编写像下面这样的方法,那么将会怎么样? 

1

void printList(List<Object> l) {

2

for (Object o : l)

3

System.out.println(o);

4

}

它仍然不会通过编译,因为一个 List<Integer> 不是 一个 List<Object>(正如前一屏 泛型不是协变的 中所学的)。这才真正烦人 —— 现在您的泛型版本还没有普通的非泛型版本有用!  解决方案是使用类型通配符: 

1

void printList(List<?> l) {

2

for (Object o : l)

3

System.out.println(o);

4

}

上面代码中的问号是一个类型通配符。它读作“问号”。List<?> 是任何泛型 List 的父类型,所以您完全可以将 List<Object>、List<Integer> 或 List<List<List<Flutzpah>>> 传递给 printList()。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 剖析 微博短链接算法 里的 位运算 操作

    本文主要写给对 java 位运算不是很了解的童鞋 和 我自己 昨天研究了一下微博短链接的算法,但是发现自己对算法里面的位运算不是很明白,所以有了今天这篇文...

    用户1688446
  • IDEA/Git 设置多个push远程仓库或者同时提交多个push仓库

    具体解决办法: 在隐藏文件.git 下有个config文件,打开,在最后一行添加以下信息 [remote "all"] url = https...

    用户1688446
  • java web Servlet 使用 Application/ServletContext

    本文介绍 怎么在Servlet Web应用 中 初始化 全局变量(ServletContext) ServletContext 也就是 java Serv...

    用户1688446
  • List与List<?>的区别何在

    泛型是Java最基础的语法之一,不过这种语法依然有值得一说的地方:如果仅停留在泛型的基本使用上,泛型当然很简单;但如果从字节码层次来看泛型,将会发现更多泛型的本...

    疯狂软件李刚
  • Java工具集-集合(CollectionUtils)

    cwl_java
  • Scala入门学习笔记四--List使用

    前言 本篇将介绍一个和Array很相似的集合List,更多内容请参考:Scala教程 本篇知识点概括 List的构造 List与Array的区别 Lis...

    用户1174963
  • Why to do,What to do,Where to do 与 Lambda表达式!

    最近我做一个“四象限”图表控件,其中有一个比较复杂的“坐标变换”问题,即是如何让一组数据放到有限的一个区间内,例如有一组数据 List[4,5,6,7,8],要...

    用户1177503
  • Android高德之旅(17)出行路线规划废话简介总结

    今天这篇来记录一下地图SDK中非常重要的一个功能:出行路线规划。我相信高德地图使用最多的也就是这个功能了,当然,我们今天的内容可能还做不到高德地图那么丰富的效果...

    大公爵
  • Java 集合深入理解(4):List<E> 接口

    蓝瘦!香菇! 连着加班几天,醉了。学学 List 放松下! ? 在 Java 集合深入理解:Collection 中我们熟悉了 Java 集合框架的基本概念和...

    张拭心 shixinzhang
  • Java List面试题汇总

    1、你知道的List都有哪些? 2、List和Vector有什么区别? 3、List是有序的吗? 4、ArrayList和LinkedList的区别?分别用在什...

    Java技术栈

扫码关注云+社区

领取腾讯云代金券