Map< Person,List< Dog>>与Map< Person,List>.在这种情况下,地图的值类型应为List,而不是可转换为相同的东西.但如果您使用Map< Person,?扩展列表>对于f的参数,它会起作用.

这是一个涉及更多基本类型的简单示例:

Map> foo = new HashMap>(); // error

Map> foo = new HashMap>(); // ok

OP询问为什么会发生这种行为.简单的答案是类型参数是不变的,而不是协变的.也就是说,给定Map< String,List>的类型,地图的值类型必须完全是List,而不是类似的东西.为什么?想象一下,如果允许协变类型:

Map> foo = new HashMap<>();

Map> bar = foo; // Disallowed,but let's suppose it's allowed

List baz = new ArrayList<>();

baz.add(new B());

bar.put("baz",baz);

foo.get("baz").get(0); // Oops,this is actually a B,not an A

糟糕,期望foo.get(“baz”).get(0)成为A被违反.

现在,假设我们以正确的方式做到这一点:

Map> bar = foo;

List baz = new ArrayList<>();

baz.add(new B());

bar.put("baz",baz); // Disallowed

在那里,编译器捕获了尝试将不兼容的列表放入foo(通过别名栏).这是为什么?延伸是必需的.

java用不起_Java,泛型不起作用相关推荐

  1. java 接口的泛型方法_Java泛型/泛型方法/通配符/泛型接口/泛型泛型擦出

    从JDK1.5以后引入了三大常用新特性:泛型.枚举(enum).注解(Annotation).其中JDK1.5中泛型是一件非常重要的实现技术,它可以帮助我们解决程序的参数转换问题.本文为大家详细介绍一 ...

  2. java参数传入泛型类型_Java 泛型(参数化类型)

    Java 泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所 ...

  3. java super extend 区别_Java泛型中extends和super的区别

    extends T>和 super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. extends T&g ...

  4. java泛型类的构造函数_Java泛型构造函数

    推荐关注公众号:锅外的大佬 每日推送国外优秀的技术翻译文章,励志帮助国内的开发者更好地成长! 1.概述 我们之前讨论过Java Generics的基础知识.在本文中,我们将了解Java中的通用构造函数 ...

  5. java泛型类的构造函数_java泛型,泛型类详解

    之前给大家介绍了一下java泛型集合方面的内容,下面要给大家介绍的就是泛型类方面的知识,一起通过简单的文章来进行一下了解吧. 泛型类 除了能够定义泛型集合之外,还能够直接限定泛型类的类型参数. 语法格 ...

  6. java参数传入泛型类型_Java泛型参数界定到任何一个类型的范围

    是否有一种语法或解决方法来将泛型类型参数限制为任何一种类型的类型? 我知道您可以将类型限制为所有类型的所有类型(即AND逻辑): public class MyClass & Serializ ...

  7. java不支持类型_java泛型为什么不支持原始类型?

    这里是说由于JVM bytecode对于原始类型和引用类型的字节码不相同,为了保持兼容性,故不支持原始类型 At the other end, we have Java's current erase ...

  8. 什么是java泛型_java泛型背后是什么

    这一节主要讲的内容是java中泛型的应用,通过该篇让大家更好地理解泛型,以及面试中经常说的泛型类型擦除是什么概念,今天就带着这几个问题一起看下: 举一个简单的例子: image.png 这里可以看出来 ...

  9. java泛型类指定多个泛型_Java泛型中的多态

    java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...

  10. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

    java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...

最新文章

  1. 基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计
  2. python 报错 SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1076) 解决方法
  3. Linux--Socket Buffer--Netowrk Devices--Network Drivers
  4. JAVA虚拟机体系结构
  5. FreeSql (十八)导航属性
  6. 开机出现GRUB error22的解决办法
  7. springcloud灰度发布实现方案
  8. SpringBoot使用netty
  9. RISC-V 能打 50 年!不必期待 RISC-VI —— 对话 RISC-V CTO Mark Himelstein
  10. 高性能Mysql(第三版)笔记
  11. python词云制作(最全最详细的教程)
  12. 《金匮要略》试卷二(A)
  13. MFC - LNK2001 “无法解析的外部符号”的几种情况及解决办法
  14. 软考论文写作这些雷区,千万要避开
  15. 群晖 使用SMB3进行局域网传输双倍叠加网速下踩的一些坑
  16. 微信小程序实现文本两端对齐
  17. 计算机网络(ISP,因特网组成,分组交换,计算机网络性能,网络体系机构)
  18. vue设置页面title
  19. python制作英语小词典_如何用python(django)创建英语词典应用程序?
  20. 安川e1000中文说明书_安川变频器E1000快速使用指南.pdf

热门文章

  1. Spring静态资源解决方案
  2. WebForm中 页面传参的总结
  3. 1.swt/rap学习源码网址
  4. C#之四十二 C# 读写文本文件乱码解决方案
  5. NYOJ 822 画图
  6. sdk manager更新失败,显示Download interrupted: read timed out,应该如何解决?
  7. Report Service 为用户“NT AUTHORITY、NETWORK SERVICE”授予的权限不足,无法进行此操作。(rsAccessDenied)处理...
  8. 运行的程序暂停_黄岩人注意!2天后,这项重要业务系统将暂停运行!
  9. 手机清除微信内置浏览器缓存
  10. iOS---实现在屏幕上实时绘图的简单效果---CAShaperLayer和UIBezierPath的简单运用