首页 / 知识
使用通配符的Java集合
2023-04-15 18:32:00

Java Collections using wildcard
上面的代码不允许您将元素添加到列表中,通配符只能用作方法中的签名,同样不能用于添加,而只能用于访问。 假设您有一个接口和两个类:
然后,您将得到返回结果列表的类:
当您需要"协变量返回",但是您返回集合而不是自己的对象时,这是一个很好的解决方案。最大的好处是,当独立于ITest接口使用ATest和BTest时,不必强制转换对象。但是,使用ITest接口时,不能将任何东西添加到返回的列表中-无法确定列表真正包含的对象类型!如果允许,则可以将BResult添加到List (作为List <?扩展T>返回),这没有任何意义。 因此,您必须记住以下内容:List <? X>扩展定义了一个可以轻松覆盖的列表,但它是只读的。 约书亚·布洛赫(Joshua Bloch)在他的著作《有效的Java》(第二版)中解释了他所谓的使用泛型的生产者/消费者原则。 Josh的解释应该告诉您为什么您的示例不起作用(编译)... 第5章(泛型)可在此处免费获得:http://java.sun.com/docs/books/effective/generics.pdf 有关此书(和作者)的更多信息,请访问:http://java.sun.com/docs/books/effective/
有界通配符类型的要点是它们在方法签名中的使用,以增加API的灵活性。例如,如果实现了通用
与没有通配符的 对于使用通配符的Java泛型,假设只打算从通配符中读取,则可以使用上述声明。 不允许对其进行添加/写入,因为必须在编译时剥离所有泛型类型,并且在编译时,编译器没有办法知道List只是字符串,(它可以是任何对象,包括字符串! ) 但是,您可以从中读取内容,因为它们将至少是对象。在Java集合中不允许混合使用不同的类型以保持内容的清洁和可理解,这有助于确保这一点。 Java泛型:集合中的通配符 今天,我将向您解释通配符的作用。理解这个概念有点困难 现在,假设您有一个抽象类,并且您有一个名为paintObject()的抽象方法。
这是AbstractMain方法。 在这里,我们针对此Abstract Main方法采取的步骤 1.我们创建了抽象类
2.在参数中,我们定义了T(您可以使用任何字符)
3.并且我们还使用了E扩展MainColorTO
4.我们定义了一个抽象方法,称为paintObject(T object,E objectTO)
现在我们将扩展到抽象类之上,并在其下实现方法
现在我们举两个例子。 1.PaintHome.java
现在在上面的PaintHome.java中,您可以检查我们是否在第一个参数中使用了ArrayList(因为可以使用任何类),在第二个参数中我们使用了RedTO(正在扩展MainColorTO) 2,PaintCar.java
现在在上面的PaintCar.java中,您可以检查我们是否在第一个参数中使用了HashSet(因为我们可以使用任何类),在第二个参数中我们使用了WhiteTO(正在扩展MainColorTO)
要记住的Ponint
上面的代码将给您编译器错误。
与
通常,您不能将字符串添加到此类列表。但是,您可以从列表中读取 有关通配符的良好介绍,请参见论文"将通配符添加到Java编程语言"。这是一篇学术论文,但仍然很容易阅读。 这有效:
从O'Reilly的Java泛型:
|
最新内容
相关内容
linux克隆代码命令?
linux克隆代码命令?,系统,代码,文件,命令,目录,源文件,文件夹,路径,目标,表示,Linux文件拷贝命令?linux系统使用cp命令即可将一个文件夹里面的linux命令支持通配符?
linux命令支持通配符?,工具,系统,命令,灵活,较大,名称,名字,环境,数字,文件,Linux的基本命令格式如何?Linux下经常使用的通配符有哪些通配符linux命令行调试代码?
linux命令行调试代码?,环境,代码,信息,平台,程序,编辑,版本,步骤,体系结构,处理器,linux怎么调试pythonLinux中如何安装Python?安装pycharmPychlinux编译源代码命令?
linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,linux怎样编译git源码包1、linux的源码是在/usr/src这个目录下,此linux命令提交代码?
linux命令提交代码?,工作,系统,地址,代码,命令,数据,信息,目录,标准,发行,求助:LINUX常用SHELL命令你可以通过打开Linux的terminal(终端)来执行Slinux代码同步命令?
linux代码同步命令?,时间,服务,系统,地址,代码,网络,通信,图片,风险,管理,linux系统时钟同步命令1、因此使用ntpdate同步可能会引发风险,因此该linux命令错误代码?
linux命令错误代码?,系统,密码,电脑,网络,手机,网址,软件,代码,设备,老板,Linux管理常见错误1、检查权限:使用文件浏览器和终端,检查文件的访问linux同步代码命令?
linux同步代码命令?,时间,系统,通信,网络,标准,图片,服务,代码,线程,单位,Linux下线程同步的几种方法1、线程同步的方式包括:互斥锁、读写锁、linux拉取代码命令?
linux拉取代码命令?,代码,工作,地址,命令,数据,系统,单位,生产,软件,目录,linux下wsdl2java获取源码命令首先,连接相应linux主机,进入到linux命linux代码对齐命令?
linux代码对齐命令?,系统,地址,标准,信息,对比,名称,代码,命令,文件,工作,linux命令大全之diff命令详解diff[参数][文件1或目录1][文件2或目录linux命令运行代码?
linux命令运行代码?,代码,单位,系统,环境,连续,保险,工具,命令,文件,音乐,Linux中,运行一个C语言程序如何运行1、编译。由.c文件生成.o文件,写搭建linux命令行代码?
搭建linux命令行代码?,系统,软件,工作,名字,服务,代码,地址,环境,管理,密码,linux如何搭建git1、Git已经在你的系统中了,你会做一些事情来客户