博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA-初步认识-常用对象API(集合框架-泛型-泛型方法)
阅读量:5223 次
发布时间:2019-06-14

本文共 1188 字,大约阅读时间需要 3 分钟。

一.

刚才说了一下泛型类,现在准备说另外一个,在工具类的基础上演示一下(基于上一节的泛型工具类)。

本来如果是显示和打印String类的方法,参数中直接表明String类型即可,但是如果想显示和打印Intrger类型的参数,那么就需要将参数改为object。

基于泛型工具类,书写可以是下面这样的。工具类里面指定什么类型,方法就跟着操作什么类型。

这样书写是否行得通,来演示一下,

传递String类型时没有问题,但是工具类中的泛型是传递什么类型都可以,那么改成Integer试一下,集成工具显示了错误。

因为定义的类带有泛型,而tool这个引用指向的对象当中明确的类型是String,那么这个对象就只能操作凡是具备String参数的方法。这个方法一明确以后,show里面就已经是String了,那么再传递其它类型就失败了,因为类型检查没过去,编译的时候没过去。

现在我们想show里面是任意类型的,怎么办?这就意味着show方法操作的对象类型不确定。有人提议将工具类中show方法的参数类型改为object,这是可以的。因为这些对象最终调用的都是object中的方法,第二张截图所示,多态。

还可以做第二件事,如果是不明确类型的情况下,object其实是一种具体类型。还可以是,往里面传递什么,就操作什么,可以定义泛型,将泛型定义在方法上。

这就是定义泛型了。(w str)是在使用参数,<w>是在定义参数,只有定义了才能使用。泛型是用于定义的?

将泛型定义在方法上之后,什么类型都可以show了,源程序编译运行都没有问题。

print泛型是跟着对象走的,show的泛型是在方法上自定义的。

接着对上面的程序进行演示,添加一个静态的method方法。集成环境显示编译是错误的,相较于前面的print方法,这里是多出了一个静态修饰。

静态是不需要对象的,泛型是需要对象来明确。静态不知道QQ怎么用,两全其美的解决方法如下图,既要是静态,又要是method方法能结构多种类型。

泛型方法的基本使用讲解完了。

再说一点,show方法和print方法接收的是字符串的话,能否打印字符串的长度呢?下面截图显示是不可以的,一旦使用了泛型,变量类型是不确定的,那怎么能使用一个具体对象的方法,万一传递的是person类型,怎么能写成str.length()。但是这个变量有些方法是可以用的,

 哪些方法是可以用的呢?用点号显示出来。我们知道无论传递什么类型进来,肯定都是object类型的对象,因此,肯定具备object方法。

如果show或者print方法里面直接写成object的话,那么只能使用object方法,但是,如果写成泛型的形式,后面会讲述到,这个W类型是可以进行一个应用的。

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/wsw-bk/p/8412215.html

你可能感兴趣的文章
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>