刚才没发上,所以重新发一下
一、泛型的使用
那么类中凡是用泛型类型表示其数据类型的地方都要等到外部通知的类型才能决定,并且统一。
例如:
public class Point<T> { // 表示坐标
private T x; // x属性的类型由外部决定
private T y; // y属性的类型由外部决定
public Point(T x, T y) {//在构造方法上使用泛型
this.setX(x);
this.setY(y);
}
public Point() {}
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
}
public class GenDemo05 {
public static void main(String[] args) {
Point<Integer> p = new Point<Integer>();//指定泛型为Integer类型
p.setX(11);//此处对参数进行检查,如果不是所决定的Integer将编译不通过
p.setY(20);
int x = p.getX(); // 取出x坐标
int y = p.getY();// 取出y坐标
System.out.println("x的坐标是:" + x);
System.out.println("y的坐标是:" + y);
}
}
二、泛型的擦除
在应用的时候,泛型如果没有设置的话,则将会进行擦除,擦除之后默认按照Object进行接收。
三、泛型转型问题
在泛型中,一个对象a实例化的时候指定为Integer,另一个对象b指定为Number或Object,并不表示a对象可以向上转型到b。
例如:
public class Point<T> { // 表示坐标
private T x; // x属性的类型由外部决定
private T y; // y属性的类型由外部决定
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
}
public class GenDemo09 {
public static void main(String[] args) {
Point<Object> p1 = new Point<Object>();
Point<Integer> p2 = new Point<Integer>() ;
p1 = p2 ; // 此时无法转换
}
}
原因:p1,p2都是Point类型,只是其中的属性不同,其各自的属性间可以实现转型。
四、通配符?
在方法的参数设置的时候如果使用了?代表数据类型,就表示可以接受任意数据类型的对象。
package mldn.lin.test;
class Point<T> { // 表示坐标
private T x; // x属性的类型由外部决定
private T y; // y属性的类型由外部决定
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
}
public class Test {
public static void main(String[] args) {
Point<Object> p1 = new Point<Object>();
Point<Integer> p2 = new Point<Integer>();
fun(p1) ;
fun(p2) ;
}
public static void fun(Point<?> po) { // 表示,此时可以接收任意的类型
System.out.println(po.getX());
System.out.println(po.getY());
}
}
五、泛型上限和泛型下限
上限就指一个的操作泛型最大的操作父类,例如,现在最大的上限设置成“Number”类型,那么此时,所能够接收到的类型只能是Number及其子类(Integer)。
泛型的上限通过以下的语法完成:某个泛型 extends 类
例如:T extends Number
泛型的下限指的是只能设置其具体的类或者父类。设置的语法如下:某个泛型super 类
六、泛型接口
泛型不光可以在类上使用,还可以在接口中进行定义。操作的语法如下:
interface 接口名称<泛型类型,泛型类型,…>{}
例如:
public interface Demo<T> { // 定义泛型接口
public void print(T param);// 此抽象方法中使用了泛型类型
}
泛型接口定义完成之后,下面就需要定义子类实现此接口,实现的方法有两种:
1、直接沿用接口的泛型
例如:
public class DemoImpl1<T> implements Demo<T> {
public void print(T param) {
System.out.println("param = " + param);
}
}
2、用子类作为泛型
public class DemoImpl2 implements Demo<DemoImpl2> { // 设置具体类型
public void print(DemoImpl2 param) {
System.out.println("param = " + param);
}
}
七、泛型方法
泛型除了在类中定义之外,还可以在方法上定义,而且在方法上使用泛型,此方法所在的类不一定是泛型的操作类。
权限修饰符 <泛型> 返回值类型 print(参数列表){}
方法的返回值类型及其中的变量的数据类型都可以用该泛型指定。
一般其中参数都有一个是泛型指定的,那么在调用该方法的时候,根据所传递的实参的数据类型来决定该泛型的具体类型。
例如:
class Demo {
public <T> T print(T param){ // 定义泛型方法
return param ;
}
}
public class GenDemo17 {
public static void main(String[] args) {
Demo d = new Demo() ;
System.out.println(d.print(1)); // 如果输入1表示类型是Integer
}
}
-----------------------------------------------------------------------------
public class GenDemo18 {
public static void main(String[] args) {
Integer i[] = fun(1, 2, 3, 4, 5, 6, 7, 8, 9);
for (int x : i) {
System.out.println(x);
}
}
public static <T> T[] fun(T... param) {
return param; // 返回数组
}
}
八、泛型的嵌套设置
例如:各个类在不同的包中
public class Info<T> {
private T param ;
public T getParam() {
return param;
}
public void setParam(T param) {
this.param = param;
}
}
public class Person<T> {
private T info;
public T getInfo() {
return info;
}
public void setInfo(T info) {
this.info = info;
}
}
public class Test {
public static void main(String[] args) {
//同时即要指定Person的泛型类型,又要指定Info中的泛型类型
Person<Info<String>> per = new Person<Info<String>>() ;
per.setInfo(new Info<String>()) ;
per.getInfo().setParam("mldnjava") ;
System.out.println(per.getInfo().getParam()) ;
}
}
I
J
K
分享到:
相关推荐
泛型是Java编程中一个强大的特性,自JDK 1.5版本引入,旨在提高代码的安全性和效率。泛型的主要目的是在编译期间检查类型安全,并允许编译器生成更高效的字节码。它允许我们在定义集合、类、接口和方法时指定一种或...
《泛用型贴标机详解》 在工业自动化领域,贴标机是不可或缺的重要设备,其主要用于产品包装上的标签粘贴工作,提高了生产效率并确保了标签的质量。本篇文章将详细解析“泛用型贴标机”,并结合提供的“泛用型贴标机...
【标题】"泛用型贴标机全套图纸-几何模型"揭示了这是一份关于通用贴标设备的设计图纸集,其中包含的是三维几何模型。在机械工程和自动化领域,这样的图纸是设计、制造和组装机械设备的基础,特别是对于贴标机这种...
集团型多元化企业的数字化转型实践-泛地产行业大会员忠诚度解决方案
不同类型的特殊表现包括眼带状疱疹、耳带状疱疹和其他不典型的类型,如顿挫型、不全型、大疱型、出血型、坏疽型、泛发型、播散型等。带状疱疹还可能引发神经系统和内脏的并发症,如急性或慢性脑炎、脊髓炎、多神经根...
特殊类型的带状疱疹包括眼带状疱疹和耳带状疱疹,以及各种不典型的类型,如顿挫型、不全型、大疱型、出血型、坏疽型、泛发型和播散型等。 神经系统并发症可能包括急性或慢性脑炎、脊髓炎、无菌性脑膜炎、多神经根炎...
刚毛柽柳RING型E3泛素连接酶基因的克隆及表达分析 ,张玉,张悦,E3泛素刚毛柽柳RING型E3泛素连接酶基因的克隆及表达分析连接酶是一个种类复杂的蛋白质家族,在对植物逆境胁迫的响应和生长发育等方�
在当前的环保与能源效率议题日益受到关注的背景下,"行业文档-设计装置-一种节能型泛光灯.zip" 提供了一个重要的知识焦点,即如何通过创新设计实现照明设备的节能化。这份压缩包内包含的"一种节能型泛光灯.pdf"详细...
【标题】"B25 泛用型贴标机"所指的是一款设计用于各种不同形状和尺寸的产品贴标的机械设备。这种设备通常被广泛应用于食品、药品、化妆品、电子等行业,能够实现自动化、高效率的标签粘贴,提高生产线的生产速度和...
¨ … …… … … …1275.4.1 协变和抗变……………… 1285.4.2 泛型接口的协变………… 1295.4.3 泛型接口的抗变 ………… 1305.5 泛 型 结 构 ¨ … … … … … ¨ … ¨1315,6 泛 型方 法 … … … … …… … ...
《大数据-算法-122型异蕴涵泛三I算法及其应用研究》这篇博士论文主要探讨了在大数据处理和算法领域中,一种名为122型异蕴涵泛三I(Generalized Triple-I)算法的理论与应用。这篇论文由唐一鸣撰写,由刘晓平教授指导...
最新新闻蜘蛛池站群源码-泛目录5天爱站权重7零距离泛目录:目前看到市面上权重最快的泛目录程序,程序目录结构见下面的图,程序来看有一些龙少站群的影子(泛域名站群) 首先通过快照源码分析,并无太多特殊之处,...
泛用型贴标机是一种广泛应用于各种产品包装过程中,用于自动贴标签的机械设备。它能实现快速、准确、高效地将标签贴附在包装物品上,极大地提升了生产效率和贴标质量。三维3D设计图纸作为这款机器的设计蓝本,详细...
【标题】"B25 泛用型贴标机 shop112483501.taobao.com.zip" 暗示了我们讨论的主题是一款名为"B25 泛用型贴标机"的自动化设备,它可能在淘宝网上销售,店铺编号为"shop112483501"。这款贴标机设计用于各种应用场景,...
家庭泛用型智能机器人的安全风险研究.pdf
泛用型贴标机_机械3D图可修改打包下载.zip
台达泛用型矢量控制变频器C2000-HS系列是一款专为高速应用设计的高性能变频器,适用于广泛的工业环境,尤其在流体机械设备中表现出色。这款变频器的最大亮点在于其能够支持高达1,500 Hz的输出频率,这使得它成为高速...
本文将详细介绍一种节能型高频无极泛光灯的设计原理、结构以及应用优势,旨在为照明设计工程师和相关技术人员提供深入的技术参考。 首先,我们从无极泛光灯的工作原理开始探讨。无极泛光灯的核心在于其无极电磁感应...