java 泛型 比较_java 泛型和object比较
引言
我们使用object和泛型做形参,都是为了让这个方法能接收更多类型的对象,让程序变得更健壮,代码复用率更高。当我们回看自己写的代码时会发现,好像使用泛型的地方使用object也可以,使用object的地方使用泛型同样能实现,那么,本文就说一下,泛型和object的却别
正题
先上举例来说明一下object和泛型的使用场景吧,有这样一个需求:写一个数字排序的算法,我们知道java中的数字类型有Double、Float、Byte、Short、Integer 以及 Long。
方法一:每种数字类型写一个方法,需要写6个方法
class Sort {
void sort(Integer[] sort) {
// 排序
}
void sort(Double[] sort) {
// 排序
}
}
方法二:使用object,只需要写一个方法。
classSort {voidsort(Object[] sort) {
Number[] numbers=(Number[]) sort;//排序
}
}
方法三:使用泛型
classSort { voidsort(T[] sort) {
Number[] numbers=(Number[]) sort;//排序
}
}
好了,开始测试
public static voidmain(String[] args) {
Test t=newTest();
t.sort(new Integer[]{2,3});t.sort1(new Integer[]{2,3});} voidsort(T[] sort) {
Number[] numbers=(Number[]) sort;
}voidsort1(Object[] sort) {
Number[] numbers=(Number[]) sort;//排序
}
编译没毛病,运行也不会有毛病,别急我们再写一个列子
public static voidmain(String[] args) {
Test t=newTest();t.sort(new String[]{"a","b"});t.sort1(new String[]{"a","b"});
} voidsort(T[] sort) {
Number[] numbers=(Number[]) sort;//排序
}voidsort1(Object[] sort) {
Number[] numbers=(Number[]) sort;//排序
}
编译没毛病,运行一下:
我们最头疼的就是这种运行时的错误了,在大型项目中都需要编译好后部署然后运行,所以大家都希望问题在编译期就暴露出来,不要等到运行时才发现问题,那么问题来了有没有一种写法能够让他在编译器发现问题呢?看下面这个例子
classSort { voidsort(T[] sort) {
Number[] numbers=(Number[]) sort;//排序
}
}
测试代码
显然使用T extends这中写法能让问题在编译期暴露
问题的解决方法有了,总结一下
1、使用object作为形参当需要进行类型强制转换时,编译期不会检查类型是否安全,运行期才会检查
2、泛型写法范型的指定保证了代码的健壮性,避免了强转的风险.
完毕
结后语
我相信大家在写这个算法时选形参的类型时,大部分猿都不会选object,而选Number,是的选Number做形参,一切问题都扫除了,但是本文只讨论泛型的优点
java 泛型 比较_java 泛型和object比较相关推荐
- java泛型面试_Java泛型面试问题
java泛型面试 Java面试中的通用面试问题在相当长的时间内在Java 5周围越来越普遍,许多应用程序都转移到Java 5上,并且几乎所有新的Java开发都发生在Tiger(Java 5的代号)上. ...
- java泛型特点_java泛型简单总结
Java泛型简单总结 1)基本概念: 泛型(Generic Type或Generics)是 对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看做是使用参数化类型时 ...
- java 泛型 恶心_Java的泛型原来这样让人不舒服
Type erasure Java泛型中的类型擦除,意为只在编译时刻进行类型检查,实际在运行时,编译器会自动插入相应的转换(cast)代码. List list = new ArrayList(); ...
- java泛型视频教程_Java泛型快速教程
java泛型视频教程 泛型是Java SE 5.0引入的一种Java功能,在其发布几年后,我发誓那里的每个Java程序员不仅会听说过,而且已经使用过. 关于Java泛型,有很多免费和商业资源,而我使用 ...
- java 泛型 继承_java基础之泛型的继承
关于泛型的基本介绍和理解请参考以下几篇文章,或查询更多资料: 本篇以简单的List<>方式来进行说明. ArrayList继承了List, ArrayList没有继承List List&g ...
- java 泛型 擦除_Java泛型和类型擦除
一 前言:初识泛型 废话不说,先来看一段代码: public class Holder { private Object data; public Holder(Object data ){ this ...
- java泛型 包_Java泛型应用浅析
Java泛型应用浅析 Java泛型,饿,这个东西吗,嚼一下还是有必要的.有啥用呢?小弟曾觉着吧,吹牛是条不错的出路,但没一次没有不吹破的.(绕吧^_^) 详解呢,没啥必要了,参见附件解压后Java泛型 ...
- java泛型实例化_java基础-泛型举例详解
泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...
- java 泛型示例_Java泛型示例教程–泛型方法,类,接口
java 泛型示例 Java Genrics is one of the most important features introduced in Java 5. Java Genrics是Java ...
最新文章
- 比尔.盖茨11点忠告
- http android下载工具,Android实现下载工具的简单代码
- 计算机网络 实验六 静态路由配置,《计算机网络》实六 静态路由配置 实验报告.doc...
- Socket支持多用户并发访问的解决办法
- 【学术相关】博士毕业也会看第一学历吗?
- oracle常用函数api,Oracle-API OracleAPI、oracle10G函数大全(常用函数)、 联合开发网 - pudn.com...
- [C#]获得线程池中活动的线程数
- sql 循环处理数据_图文介绍 SQL 的三种查询计划处理模型,Spark 用了其中两个
- 调用kmeans_聚类分析—KMeans
- UpdatePanel 的 UpdateMode 和 ChildrenAsTriggers(较好的总结了前面几篇博客的内容)
- python中文分词工具_结巴中文分词工具的安装使用 Python分词教程
- java cxf文件上传下载,CXF webservice 上传以及下载文件
- 车载网络技术革新-CAN FD浅析
- IOS11降级到IOS10的操作方法(刷机有风险,操作需谨慎)
- 流程框图-各方框含义
- 中国科学家首次解析人脑“中央处理器”,领先美国脑计划
- JavaScript实现简单星星闪烁特效
- centos8在桌面添加pycharm和idea快捷方式没有allow launching选项问题
- c语言数字的写法田字格,数字100田字格怎么写
- 汇编语言_使用int16h中断读取键盘缓冲区
热门文章
- 计算机网络课设-小型校园网,计算机网络课设 小型校园网
- gta4 l3环境优化补丁_【安全刻不容缓】快给你们的爱7打打补丁吧 俄罗斯大佬的持续更新补丁包来了...
- java jpa更新数据_Java如何使用JPA更新实体对象?
- java中string范围_java中long parseLong(String s)方法中string(十进制数字)的范围?
- 机器学习(1)PLA
- c#之跟踪(c#高级编程系列)
- 语言木头折断放置问题_木头文化:干燥,是木成材的关键一步
- linux内存管理详解,Linux内存管理图文讲解.pdf
- ahb总线协议主机_IIC协议学习笔记
- 查看pcl版本 linux,成功安装 linux pcl (1.8.1版本) python-pcl