泛型类及应用

在使用泛型定义的类创建对象时,即在泛型实例化时,可以根据不同的需求给出类型参数T的具体类型。而在调用泛型类的方法传递或返回数据类型时可以不用进行类型转换,而是直接用T作为类型来代替参数类型或返值的类型。

说明:在实例化泛型类的过程中,实际类型必须是引用类型,即必须是类类型,不能用如int、double或char等这样的基本类型来替换类型参数T。

例题:泛型类的定义及应用

//filename:App12_1.java   泛型类的应用
public class App12_1 <T>  //定义泛型类,T是类型参数
{private T obj; //定义泛型类的成员变量public T getobj() //定义泛型类的方Name法{return obj;}public void setObj(T obj)  //定义泛型类的方法 setObj(){this.obj=obj;}public static void main(String[] args){App12_1<String>name =new App12_1<String>();//创建App12_1<String>型对象App12_1<Integer> age= new App12_1<Integer>();//创建App12_1<Integer>型对象name.setObj("陈  磊");String newName=name.getobj();System.out.println("姓名:"+newName);age.setObj(25); //Java自动将25包装为new Integer(25)int newAge=age.getobj();//Java将Integer类型自动解包成int类型System.out.println("年龄:"+newAge);
}
}

程序运行结果如下:

姓名:张磊

年龄:25

通过该例可以看出,泛型类的定义并不复杂,可以将T看作是一种特殊的变量,该变量的“值”在创建泛型对象时指定,它可以是除了基本类型之外的任意类型,包括类、接口等引用类型。
说明:当一个泛型有多个类型参数时,每个类型参数在该泛型中都应该是唯一的。如不能定义形如Map<K,K>形式的泛型,但可以定义Map<K,V>形式的泛型。

泛型方法

一个方法是否是泛型方法与其所在的类是否是泛型类没有关系。要定义泛型方法,只需将泛型的类型参数<T>置于方法返回值类型前即可。在Java中任何方法(包括静态方法和构造方法)都可声明为泛型方法。泛型方法除了定义不同,调用时与普通方法一样。

例题:泛型方法的应用 

//filename:App12_2.java
public class App12_2
{public static void main(String[] args){Integer[] num= {1,2,3,4,5};String [] str= {"红","橙","黄","绿","青","蓝","紫"};App12_2.display(num);App12_2.display(str);}public static <E> void display(E[] list){for(int i=0;i<list.length;i++)System.out.print(list[i]+" ");System.out.println();}
}

该程序运行结果如下:

1 2 3 4 5

红 橙 黄 绿 青 蓝 紫

一般来说编写Java泛型方法时,返回值类型和至少一个参数类型应该是泛型,而且类型应该是一致的,如果只有返回值类型或参数类型之一使用了泛型,这个泛型方法的使用就大大地受限制,基本限制到跟不用泛型一样的程度。所以推荐使用返回值类型和参数类型一致的泛型方法。Java泛型方法广泛使用在方法返回值和参数均是容器类对象的情况。

  • 注意:若泛型方法的多个形式参数使用了相同的类型参数,并且对应的多个类型实参具有不同的类型,则编译器会将该类型参数指定为这多个类型实参所具有的“最近”共同父类直至Object。
  • 说明:一个static方法,无法访问泛型类的类型参数,所以如果static方法需要使用泛型能力,必须使其成为泛型方法。

当使用泛型类时,必须在创建泛型对象的时候指定类型参数的实际值,而调用泛型方法时,通常不必指明参数的类型,因为编译器有个功能为类型参数推断,此时编译器会找出具体的类型。类型推断只对赋值操作有效,其他时候并不起作用。

泛型类及应用和泛型方法相关推荐

  1. C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

    目录 一.泛型(generic) 二.为什么需要泛型类 类型膨胀 成员膨胀 使用object类 三.泛型的定义 定义泛型类 使用泛型类 泛型接口​​​​​​​ 两种泛型接口的实现方法 泛型方法 成员膨 ...

  2. Java泛型:泛型类、泛型接口和泛型方法

    2019独角兽企业重金招聘Python工程师标准>>> 根据<Java编程思想 (第4版)>中的描述,泛型出现的动机在于:有许多原因促成了泛型的出现,而最引人注意的一个原 ...

  3. 【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )

    文章目录 一.泛型类用法 二.泛型方法用法 三.泛型通配符 <?> 四.泛型安全检查 五.完整代码示例 1.泛型类 / 方法 2.main 函数 一.泛型类用法 泛型类用法 : 使用时先声 ...

  4. 泛型类、泛型方法及泛型应用

    泛型类.泛型方法及泛型应用 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口 ...

  5. 泛型类、泛型方法的使用与理解

    本文参考<Java核心技术 II 高级特性>有关章节 一. 为什么要使用泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用.例如,我们不希望为聚集String和Fil ...

  6. 【蓝桥软件学院】泛型类、泛型方法及泛型应用

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  7. (011) java后台开发之泛型类

    转自:https://course.tianmaying.com/java-basic+generic-basic#1 泛型类 (很重要的一个自定义的类型) 在使用泛型时,我们可以把类型作为参数传入到 ...

  8. Java:高级之泛型概念引入,泛型可以设置多个类型参数,泛型继承和泛型接口实现,限制泛型可用类型,泛型通配的方式,泛型方法,泛型方法限制泛型可用类型

    目录页         泛型简介         泛型类         限制泛型可用类型         类型通配声明         泛型方法 问题引入 如果我们需要产生多个对象,每个对象的逻辑完 ...

  9. java模型给泛型_java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

    对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应 ...

最新文章

  1. JUC多线程核心知识-思维导图
  2. 野指针出现的三种情况
  3. Session Sticky
  4. 嵌入式驱动自学者的亲身感受,有什么建议?
  5. iPad网页开发教程及规则
  6. Sublime Text 常用环境和插件配置
  7. html5与其他语言的优势,浅谈:html5和html的区别
  8. dataloader 源码_[莫烦 PyTorch 系列教程] 3.5 – 数据读取 (Data Loader)
  9. 【Python3 爬虫】14_爬取淘宝上的手机图片
  10. FreeSwitch Originate API
  11. 外语学习的真实方法及误区
  12. mysql索引左倾_MySQL索引学习
  13. r语言中形成的c函数,R语言_par()函数用法
  14. 路由器WIFI密码忘记了怎么办
  15. Asp.Net MVC 实用视频教程
  16. Google jib插件的使用
  17. 华硕P10S-M主板组装服务器-raid配置方法
  18. 学人工智能有前途吗?AI发展前景怎么样?
  19. 从校招时间谈大学求职准备
  20. 谷歌与荣耀恢复合作:荣耀50系列海外新机获GMS授权

热门文章

  1. swagger的使用---基础
  2. HD630核显,Deepin安装进度条卡0%、开机卡logo界面、进入桌面鼠标一直转圈解决方法
  3. c语言五个水手分椰子答案,水手分椰子——迭代法、递归解题
  4. web渗透之文件包含漏洞-学习笔记分享
  5. UGUI——判断是否点击在UI上
  6. unlegal android,yy99/cordova-baidu-location
  7. 《纳税富翁》–一款“税收知识”的严肃游戏
  8. 【ae】抠图之:线性颜色键,去除背景色,与其他图层溶合
  9. 身份证上的号码代表的意思大揭秘
  10. 计算机网络中校园网的不利是什么意思,【这是什么意思?】校园网问题~