【java核心技术】泛型设计

Nerissa ·
更新时间:2024-09-21
· 628 次阅读

目录一、泛型概述二、泛型定义(1)泛型类(2)泛型方法2.1 泛型可变参数(3)泛型接口(4)类型限定三、泛型使用(1)类型通配符1.1 上限1.2 下限四、泛型擦除五、泛型数组 一、泛型概述

泛型,即是参数化类型。在没有泛型前,构建Object类型的集合可能出现ClassCastException。而在jdk5引入泛型后,便可以在编译器实现类型检查(实际为编译器语法糖,虚拟机没有泛型对象,所有对象都属于普通类)
泛型标识符一般为 T,E,K,V

二、泛型定义 (1)泛型类

代码示例:

public class Generic { private T num; public T getNum() { return num; } public void setNum(T num) { this.num = num; } } public class GenericTest { public static void main(String[] args) { // 按给定泛型决定 Generic gen1 = new Generic(); gen1.setNum("hahaha"); Generic gen2 = new Generic(); gen2.setNum(5); } }

注意:

类型参数不能是基本数据类型 没指定具体数据类型,默认为Object 泛型类型逻辑上是不同类型,实际是相同类型(getClass形同)

从泛型类派生子类:

子类是泛型类,子类和父类泛型类型要一致 子类不是泛型类,父类需要明确泛型类型 public class A extends B{} public class A extends B{} (2)泛型方法

代码示例:

public class Generic{ private int num; public void show(T t){ System.out.println(t); } } public class GenericTest { public static void main(String[] args) { Generic gen = new Generic(); // 由参数类型决定 gen.show("hahaha"); gen.show(555); } }

注意:

在泛型类中public T getNum()是成员方法而不是泛型方法,只有public void show(T t)带的才是泛型方法 成员方法无法定义为static,泛型方法可以 在调用方法的时候定义类型,与泛型类中的类型无关 2.1 泛型可变参数 // 此时t为数组 public void show(T ...t){ for (T t1 : t) { System.out.println(t1); }; }

t为数组,可以传任意多的值

gen.show(1,2,3,4,5); (3)泛型接口

代码示例:

public interface Genericinf{ public abstract void show(T t); } /** *实现类 */ public class Genericimpl implements Genericinf{ @Override public void show(T t) { System.out.println(t); } } public class GenericTest { public static void main(String[] args) { new Genericimpl().show("hahaha"); new Genericimpl().show(555); } } (4)类型限定

(在定义泛型类,泛型接口,泛型方法时)
T t ,意味着 t 可以是任何一个类的对象,访问一些特殊方法时就必须限定T的范围(例如上个例子需要访问show方法,若不限制T则有可能有的类没有show方法)
举个例子:
A 父类
B 接口
C 接口
限定类型格式
说明:表示T继承自A且实现了B,C接口

class void Generic{ }

注意:

使用&分隔,可以有任意多个接口,但只能有一个类且必须放在第一个 三、泛型使用 (1)类型通配符

(在使用泛型类,泛型接口时)

?为类型实参,而非类型形参

Generic generic = new Generic(); 1.1 上限 // 报错了 ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); ArrayList list3 = new ArrayList(); 1.2 下限 ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); // 报错了 ArrayList list3 = new ArrayList(); 四、泛型擦除

泛型类
原创文章 16获赞 5访问量 742 关注 私信 展开阅读全文
作者:假裝



java核心技术 JAVA 泛型

需要 登录 后方可回复, 如果你还没有账号请 注册新账号