java死鬼,Java中的泛型理解 - osc_84itep82的个人空间 - OSCHINA - 中文开源技术交流社区...-程序员宅基地

技术标签: java死鬼  

泛型,又名"参数化类型",顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

已经有基本数据类型了,还引入泛型,为什么呢?

举个例子:

未使用泛型:

classprintArr{public void Parr(char[] Arr){ //字符串类型

for (int i = 0; i

System.out.print(Arr[i]);

}

System.out.println();

}public void IArr(int[] Iarr ){ //int类型

for (int i = 0; i

System.out.print(Iarr[i]);

}

}

}public classlizi {public static voidmain(String[] args) {char[] Arr = {'H', 'E', 'L', 'L', 'O'};int[] Iarr = {1,2,3,4,5,6,7};

printArr pa= newprintArr();

pa.Parr(Arr);

pa.IArr(Iarr);

}

}

运行结果:

1289ba7f840b2c4e456db22214c3f19178c.jpg

3b3a26ba291fae300be9707fee1b2fe36ab.jpg

1 HELLO2 1234567

View Code

由上的代码我们看见有许多冗余代码,作为一个优秀的程序员,我们肯定会用少量的代码,实现不变的功能,我们想到了用数据通用对象Object,说来就来,干了这段代码。。。一分钟后,我又回来了。Perfect,可以使用。

classprintArr{public void Parr(Object[] Arr){ //字符串类型

for (int i = 0; i

System.out.print(Arr[i]);

}

System.out.println();

}

}public classlizi {public static voidmain(String[] args) {

Object[] Arr= {'H', 'E', 'L', 'L', 'O'};

Object[] Iarr= {1,2,3,4,5,6,7};

printArr pa= newprintArr();

pa.Parr(Arr);

pa.Parr(Iarr);

}

}

运行结果:

a37c580a53ab9fd65c96db2470b174f7899.jpg

7468f11a6ac99ce6a8a6a57136191b77bc1.jpg

1 HELLO2 1234567

3

4 Process finished with exit code 0

View Code

But,虽然这段代码看起来,非常灵活,可以接收任何数据类型,可以说是一劳永逸。但全面地讲,也不是没有缺陷的,主要表现在:当代码处理值类型时,会出现装箱、拆箱操作,但将用到的数据类型的强制转换操作,增加处理器的负担。

So,我们想到,能不能用一种方法,当我们调用方法时自动分配数据类型,不用再重复的封箱,拆箱,Congratulations,我们发现了泛型,,用一个通用的数据类型T来作为一个占位符,等待在实例化时用一个实际的类型来代替。let  our see see 泛型的霸道之处。

我又来了,总算是好了。代码如下

classprintArr{//泛型方法 printArray

public < E > voidprintArray( E[] inputArray )

{//输出数组元素

for( E element : inputArray ){

System.out.printf("%s", element );

}

System.out.println();

}

}public classlizi {public static voidmain(String[] args) {

Character[] Carr= {'H', 'E', 'L', 'L', 'O'};

Integer[] Iarr= {1,2,3,4,5,6,7};

printArr pa= newprintArr();

pa.printArray(Carr);

pa.printArray(Iarr);

}

}

运行结果:

888dbf10622e2c0b21ce5e2f967104ca673.jpg

ed05817a518b0952a65b2c6eb9207c589b4.jpg

1 HELLO2 1234567

View Code

老规矩,最后加一句:

The harder, the luckier.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29185199/article/details/115805800

智能推荐

python3中cv2.imread返回NoneType的解决方法-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏6次。这两天做东西真是诸事不顺,caffe各种爆炸,今天在转换数据集格式的时候python又炸了,具体情况如下:环境anacond3,python3,opencv3,代码中cv2.imread(train_filepath)后返回NoneType,百度了一圈大都是说路径不对,opencv-python包不对之类的问题,于是我仔细检查各种路径没有问题后,将anaconda到各种包全update了一...

ESP32 Arduino引脚分配参考:您应该使用哪些 GPIO 引脚?_esp32引脚分配指南-程序员宅基地

文章浏览阅读931次。但是,如果您有外设连接到这些引脚,则在尝试上传新代码、使用新固件刷新 ESP32 或重置开发板时可能会遇到困难。如果您有一些外设连接到捆绑引脚,并且您在上传代码或刷新 ESP32 时遇到问题,可能是因为这些外设阻止了 ESP32 进入正确的模式。由于 ESP32 芯片的多路复用功能,这是可能的。这意味着,如果您有连接到这些 GPIO 的输出,则当 ESP32 重置或启动时,您可能会得到意外的结果。并非所有开发板都可以访问所有 GPIO,但无论您使用哪种开发板,每个特定 GPIO 都以相同的方式工作。_esp32引脚分配指南

智能手机芯片天梯图片_联发科的骄傲——天玑1000 网友自制手机SoC天梯图排名前列...-程序员宅基地

文章浏览阅读2.7w次。11月28日消息,今日,有网友在微博上晒出一张手机芯片的天梯图,并重点赞扬了位于顶端的天玑1000芯片。该芯片是联发科于前日正式发布的旗下首款旗舰级5G集成芯片,且预计搭载它的首款终端设备将于2020年第一季度发售。天玑1000以北斗七星之一的名字命名,象征该芯片是5G时代的领跑者,事实上该芯片也确实性能强悍。在安兔兔跑分数据中,搭载该处理器的手机跑分高达511363,这是麒麟990和骁龙855 ..._天玑1000天梯图

torch.cat() 使用详解_torch.cat 会重新申请内存吗-程序员宅基地

文章浏览阅读909次。官方文档torch.cat(inputs, dimension=0) → Tensor在给定维度上对输入的张量序列seq 进行连接操作。torch.cat()可以看做 torch.split() 和 torch.chunk()的反操作。参数:inputs (sequence of Tensors) – 可以是任意相同Tensor 类型的python 序列dimension (int, optional) – 沿着此维连接张量序列。cat() 函数可以通过下面例子更好的理解。官方例子>_torch.cat 会重新申请内存吗

oracle怎么改字符编码格式,Oracle修改字符编码-程序员宅基地

文章浏览阅读2.3k次。在操作数据库的时候,需要 根据 实际情况,修改数据库的编码 ,如下提供一个修改数据库的编码过程。 查看数据库当前编码: select userenv('language') from dual; 在windows的命令 窗口,输入 cmd 打开do s窗口。 输入:sqlplus/nolo g 打开数据连接 ;输入在操作数据库的时候,需要根据实际情况,修改数据库的编码,如下提供一个修改数据库的编码..._oracle设置编码格式

.net是什么-程序员宅基地

文章浏览阅读2.6w次,点赞2次,收藏8次。距离学习.net有一年了。直到前段时间的面试中,才发现对.net的理解有很多的问题。当时在网上简单地查了一下,大概了解了一下。现在我徒弟反映.net视频有很多不理解的地方,我们讨论了一下,也给了我一个很好的再学习机会。下面是我对.net的再理解。_net

随便推点

web前端面试题及答案整理(一)_在javascript中,如果执行语句math.round(7.25),则得到-程序员宅基地

文章浏览阅读3.4k次,点赞5次,收藏18次。web前端、HTML、CSS、JavaScript、DOM_在javascript中,如果执行语句math.round(7.25),则得到

Android app版本升级的一个简单实现_安卓versioncode 升级-程序员宅基地

文章浏览阅读7.7k次。1升级原理build.gradle 中 versionCode 1 , versionName “1.0.0” 是升级的关键,versionCode是个int,versionName是个String,其中versionCode每次要升级版本都需要+1,VersionName是给用户看的,让用户知道当前版本。升级原理:从服务器获取升级信息,包括versionCode,versionN..._安卓versioncode 升级

windows下查看端口被什么程序占用-程序员宅基地

文章浏览阅读73次。为什么80%的码农都做不了架构师?>>> ..._windows查看端口被哪个进程占用

mugen linux主程序,Mugen主程序报错汇总-程序员宅基地

文章浏览阅读4.8k次。原文来自11区民间整合的Mugen主程序报错汇总,同时加入了千寻网站平时收集的常见报错,源地址:http://mugenbinran.web.fc2.com/error.html以下皆为机翻,有空会慢慢修正翻译加载初始场景报错报错关键字:dojo.def 或 stage0.def原因:程序以debug模式运行且调用了debug场景解决方法:1、在mugen.cfg文件内找到[Debug]下的Sta..._mugen报错

python用matplotlib画折线图_from matplotlib import pyplot as plt x=range(2,26,-程序员宅基地

文章浏览阅读304次。1、from matplotlib import pyplot as pltx=range(2,26,2)y=[15,13,14.5,17,20,25,26,26,24,]22,18,15fig=plt.figure(figsize=(20,8),dpi=80)#设置图片大小plt.plot(x,y)#plt.xticks(x)#设置x轴刻度plt.xticks(range(2..._from matplotlib import pyplot as plt x=range(2,26,2) y=[15,13,14,17,20,26,26

热风枪使用之碳化温度_碳火加风枪温度-程序员宅基地

文章浏览阅读497次。_碳火加风枪温度

推荐文章

热门文章

相关标签