java泛型方法无参_从头再来:Java泛型(开发必须知道的)

c290120f6d16a31c7a762e5744991b13.pngJava泛型

老规矩,测试一下,下面的程序能否正常运行?为什么?

d2946c2f9a13a44a6ca695f62a7490b7.png开头测试题

泛型就是实现了参数化类型,也就是代码可以适用于多种类型。泛型是在编译期检查的,在编译期检查类型是否安全。我认为泛型最有用的就是和集合类一起使用。

简单实现一个泛型类型

定义一个类Holder,T可以理解为一个占位符。使用时可以指定T为其他对象,就像测试代码一样,我们可以用String替换T。

921d9bb47d0395116d7a955399c1f72a.png一个泛型的例子

泛型类和泛型接口

上面的那个例子就是泛型类,泛型也适用于接口,我们自定义接口Gen的参数化为T,因为T类型是没办法创建实例的,这里传入Class对象,通过反射来实例化。

1315d055532d812130041197f622c406.png泛型接口

泛型方法

静态的方法无法使用类的类型参数,如果静态方法使用泛型的能力,就必须使用泛型方法(非静态的方法也可以为泛型方法)。泛型方法在返回值前定义泛型参数,大概的定义如下:

public void test(T t){}

并且泛型方法可以用在可变参数中,请判断下面的程序到底执行了那个方法?

7303fa8de32e4700aa63c945a4d8a028.png泛型和可变参数

上面的程序是不能通过编译的,错误信息为:The method test(Integer) is ambiguous for the type TestG。因为在编译时test(T t)和test(Integer t)此时是一样的,我们的参数是Integer的时候,编译器区分不开到底调用哪个方法。

通配符

有时候不限制类型的时候,我们可以用通配符“?”,比如定一个一个List>,这个和不限制好像没有什么区别,当在map中使用的时候就能看出来有一定的用处。比如我们限制key是String类型的,value可以是任意类型的时候,我们可以用Map。

通配符使用的时候可以设置边界,关键字就是entends,语法就是,就是限制参数为某个类型的子类。比如MyClazz exnteds Number>代表MyClazz只能使用Number或者Number的子类。

看一个List中使用通配符的边界的问题,源码如下:

4cd24ff0a6f930838e0ccd872cf886e9.pnglist添加数据问题

Integer是继承于Number,按说能添加才对吧,为什么添加不了了?原因就是add方法的参数是E,当我们使用? extends Number的时候,此时的add方法的参数就变成了了? extends Number,此时编译器不能确定使用的是哪个子类,因此编译器就直接拒绝对参数列表中涉及通配符的方法的调用。

解决这个问题的方法就是使用超类通配符,语法为 super 基类型>,意思声明通配符是由某个特定类的任何基类来界定,修改的代码如下:

5f820c73f63ad38038a0c0d17ba6f884.png超类通配符

总结下问题

1、基本类型不能作为类型参数

2、一个类不能实现同一个泛型接口的两种变体,简单来说就是继承的类和实现的接口的类型参数不同

3、使用带有泛型参数的转型或者instanceof不会有任何效果。

4、如果有两个类型参数的时候,重载时有问题的,代码如下:

a4cd22581e154affcaede8db90ba7edd.png重载问题

还是开头的那句话,泛型主要用在集合类中,我们起码要在集合中使用好泛型。

欢迎关注,留言,讨论,如果有任何问题,请批评指正,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几种常见模式识别算法整理和总结

这学期选了门模式识别的课。发现最常见的一种情况就是,书上写的老师ppt上写的都看不懂,然后绕了一大圈去自己查资料理解,回头看看发现,Ah-ha,原来本质的原理那么简单,自己一開始仅仅只是被那些看似formidab…

fastd java下载_FastReport VCL报表控件

FastReport VCL报表控件是著名的 Delphi 打印控件。含全部源码。支持 Delphi 10.2 Tokyo,FastReport可以在大量的方式报表的创建过程中操纵对象。快速发展的报表和随后的打印,这样的优点,正如预览打印文档的外观。专业版除了报表标准版的功能…

#102030:在30天内运行20 10K来庆祝Java的20年

1995年5月23日是技术史上的重要时刻。 业界似乎并没有意识到当天发布的语言会在未来几年内完全改变技术的格局。 Java将在今年的同一天庆祝20岁生日。 Java 20年,哇! 回顾20年前的存储器时代,思考一下Java的发明时间/方式。 万维网专用于精…

View 的 android:visibility属性的讨论

Android VIEW 中的 visibility 属性,在API中的描述为:Controls the initial visibility of the view. [控制VIEW的初始可见性]。 其中包含三个参数: * 默认值为visible,可见。这里需要注意的是 "invisible" 和 "go…

JQuery-Dialog(弹出窗口,遮蔽窗口)

在Ajax中经常用到的弹出窗口和遮蔽窗口。自己写肯定是一个最佳方案,但时间和成本上,还是决定了寻找现成的吧。大概罗列一下。需要我满足我几个条件 一定要简洁方便拥有遮蔽功能,Model Dialog ,所谓的模态窗口可以根据HTML弹出窗口…

java调用接口实现的方法_java调用接口的实现方法

java调用接口的实现方法发布时间:2020-06-29 11:08:46来源:亿速云阅读:78作者:Leah本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇…

Java EE应用程序的单片到微服务重构

您是否曾经想过将现有的Java EE整体应用程序重构为基于微服务的应用程序需要做什么? 该博客解释了一个简单的购物车示例如何转换为基于微服务的应用程序,以及围绕它的一些担忧。 整体和基于微服务的应用程序的完整代码库位于: github.com/ar…

Java代码韦伯分布_第十五节、韦伯局部描述符(WLD,附源码)

纹理作为一种重要的视觉线索,是图像中普遍存在而又难以描述的特征,图像的纹理特征一般是指图像上地物重复排列造成的灰度值有规则的分布。纹理特征的关键在于纹理特征的提取方法。目前,用于纹理特征提取的方法有很多,最具有代表性…

JavaFX真实世界应用程序:欧洲电视网广播联盟

我荣幸地与今年在德累斯顿Saxonia 系统公司工作的Alexander Casall一起在JavaOne上展示了多个JavaFX Real-World应用程序。 在准备本次演讲时,我们向客户和合作伙伴发送了一份调查表,并向他们询问了一些与他们的项目,他们的应用程序以及他们对…

java 三大集合_java中的三大集合入门笔记(简单实用)

为什么使用集合框架如图:集合的好处:集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合适用于不同的场合。Java集合主要分为以下3种类型Java集合框架提供了一套性能优良、使用方便的…

Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...

1.什么是Spring beans?Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义。Spring 框架定义的beans都是单件bean…

使用此首选项可加快Eclipse m2e配置

谁不认识他们。 Eclipse中的旧式JFace对话框可以使您直观地看到实际上是一个相当简单的XML或属性文件。 对于m2e,它看起来像这样: 不幸的是,此屏幕的加载速度有点慢,除了检查版本号和您将永远不会更改的其他内容之外&#xff0c…

【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!

【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图! 原文:【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!摘要: 百度地图静态图API!您无须执…

脚本在流程中的性能影响

我们经常看到人们出于各种目的而使用脚本(例如,在服务任务,执行侦听器等中)。 使用脚本和Java逻辑通常很有意义: 它不需要打包到jar中并放在classpath上 它使流程定义更易于理解:无需查看其他文件 逻辑是…

PowerDesigner使用教程

原文:http://www.cnblogs.com/huangcong/archive/2010/06/14/1757957.html PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一。Rose是专攻UML对象模型的建模工具,之后才向数据库建模…

红帽峰会2015所需的JBoss BPM内容指南

明年再见? 今年在Red Hat Summit上,我们在JBoss BRMS和JBoss BPM Suite演讲中获得了很多乐趣。 在DevNation周围也有一些社区会议,重点介绍了使我们的产品成为可能的项目。 您可以在他们的博客上找到此演讲的概述,并在其中提供…

设计模式 之 享元

享元模式(Flyweight) 运用共享技术有效地支持大量细粒度的对象。 还记得那年夏天一起在作文本上玩过的五子棋吗?五子棋是一种两人对弈的纯策略型棋类游戏,它起源于中国古代的传统黑白棋种之中的一个,不…

php制作简单的用户登陆,如何用php代码实现简单的用户登陆以及登陆验证功能

本文主要简单讲述了如何使用php实现简单的用户登陆以及登陆验证效果。1、首先实现通过Session实现用户的登录那么什么是session呢?session被译为会话,它主要是为了在一定访问期间在不同页面之间间传输数据,用来解决http协议无状态。session在…

Quick cocos2dx-Lua(V3.3R1)学习笔记(十)-----搭建安卓打包环境,用官方示例anysdk生成apk运行...

话说我这一篇就写搭建打包安卓环境,是不是有点过早了(其实我主要是怕以后重装系统,忘了怎么搭建了),但是迟早要面对的痛苦,一直延后也不是办法,对吧。 在官方文档中,对于打包安卓apk…

php实现返回顶部,返回顶部js

返回顶部jsfunction goTopEx(){var objdocument.getElementById(“goTopBtn”);function getScrollTop(){return (document.documentElement.scrollTopdocument.body.scrollTop);}function setScrollTop(value){if(document.documentElement && document.documentEleme…