Java JDK5新特性-泛型
发布日期:2022-04-02 18:15:41 浏览次数:10 分类:博客文章

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

2017-10-30 22:47:11

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

泛型是一种把类型的明确工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。

注意:类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。

  • 泛型出现的原因

早期的时候,使用Object来代表任意类型。但是这样在向上转型的是没有问题的,但是在向下转型的时候存在类型转换的问题,这样的程序其实是不安全的。所以Java在JDK5之后提供了泛型来解决这个问题。

  • 泛型应用

~ 泛型类

格式:public class 类名<参数类型,...>{}

public class ObjectTool
{ private T obj; public void setObj(T obj) { this.obj = obj; } public T getObj() { return obj; }} public static void main(String[] args) { ObjectTool
obj = new ObjectTool<>(); obj.setObj("Hello World."); System.out.println(obj.getObj()); }

~ 泛型方法

格式:public <T> 返回值 方法名(T a){}

public 
void show(E s) { System.out.println(s); }public static void main(String[] args) { ObjectTool
obj = new ObjectTool<>(); obj.show("Hello world.");      obj.show(120); }

 ~ 泛型接口

格式:public interface 接口名<泛型名称,...>{}

public interface Inter
{ public void show(T s);}/** * 有两种情况 * 一是实现类中已经知道了具体类型(不常见) * 一是实现类中不知道具体的实现类型,这时候需要在实现类后也跟上泛型 * @param
*///public class InterImpl
implements Inter
{//// @Override// public void show(T s) {// System.out.println(s);// }//}public class InterImpl implements Inter
{ @Override public void show(String s) { System.out.println(s); }} public static void main(String[] args) { //第一种情况,不知道类型,所以在实现类后也要跟上泛型 //Inter
inter=new InterImpl<>(); //inter.show("Hello world."); //第二种情况,实现类已经知道了具体类型,此时实现类中就不需要添加泛型了 Inter
inter = new InterImpl(); inter.show("Hello world."); }
  •  泛型通配符

<?>:类型通配符一般是使用?代替具体的类型参数。例如 List<?> 在逻辑上是List<String>,List<Integer> 等所有List<具体类型实参>的父类。

//泛型如果明确的写的时候,前后类型必须一致Collection c1 = new ArrayList();Collection c2 = new ArrayList
(); //报错Collection
c3 = new ArrayList
(); //报错//?表示任意类型都是可以的Collection<?> c4 = new ArrayList
();Collection<?> c5 = new ArrayList
(); Collection<?> c6 = new ArrayList
();

<? extends E>:向下限定,只能是E及其子类

Collection
c1 = new ArrayList(); //报错Collection
c2 = new ArrayList
();Collection
c3 = new ArrayList
();Collection
c4 = new ArrayList
();

<? super E>:向上限定,只能是E及其父类

Collection
c1 = new ArrayList(); Collection
c2 = new ArrayList
();Collection
c3 = new ArrayList
(); //报错Collection
c4 = new ArrayList
(); //报错

 

转载地址:https://www.cnblogs.com/hyserendipity/p/7758200.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java 集合-List接口和三个子类实现
下一篇:Java JDK5新特性-增强for

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月04日 00时32分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

定义泛化。举个例子_网易考拉应用的dubbo泛化调用,是如何实现的? 2019-04-21
mysql里可以用cube吗_sql server的cube操作符使用详解_mysql 2019-04-21
php mysql 图书_使用PHP+MySQL来对图书管理系统进行构建 2019-04-21
单片机c语言 int1,51单片机into、int1中断计数c语言源程序.doc 2019-04-21
c语言课程设计工资管理建库,C语言课程设计工资管理系统参考.doc 2019-04-21
c语言case中途跳出,break语句在switch结构语句中的作用是终止某个case,并跳出switch结构语句。... 2019-04-21
c51写c语言外部ram头文件,C51中访问外部RAM的方法 2019-04-21
51c语言产生随机证书,基于51单片机的随机数产生器设计-LCD1602-KEY-(电路图+程序源码)... 2019-04-21
C语言编写程序计算高考倒计时天数,基于51单片机LCD12864大字符校时万年历带高考倒计时程序... 2019-04-21
c语言打开一个html文件路径,C语言文件处理-C语言文件的打开和关闭 2019-04-21
普职融通信息技术课本C语言,“三步走”扎实推进“普职融通”办学新模式 2019-04-21
Android多个签名,【Android】Android批量重签名 2019-04-21
html unicode编码转换,JS实现的Unicode编码转换操作示例 2019-04-21
html页面角落放动漫人物,L2Dwidget.js L2D网页动画人物添加 2019-04-21
html图片水平居中,CSS制作图片水平垂直居中 2019-04-21
水滴pin安卓版apk_财务报销管理系统 2019-04-21
平面设计师okr_设计团队的KPI/OKR如何制定? 2019-04-21
仪表盘故障图像识别_仪表显示的图像识别算法研究 2019-04-21
c#背单词小程序视频_C#用timer实现背单词小程序 2019-04-21
24v开关电源维修技巧_【电视技术】液晶电视电源板十个维修经验分享 2019-04-21