Java基础之泛型

泛型

泛型是通用类型的类,泛型类对象可以表示多种不同种类的类的对象。类是对属性和行为的封装。采用泛型类,将封装方式相同但属性类型不同的多个类用一个泛型类表示。

泛型类:

class 泛型类名 <类型参数列表>{
// body
}

class MyArrayList<T>{
	private T[]element =(T[])new Object[10];
}

定义泛型类后就可以定义泛型类的对象。定义形式

泛型类名[<实际类型列表>] 对象名 = new 泛型类名 [<实际参数列表>] ([形参表]);或
泛型类名[<实际类型列表>] 对象名 = new 泛型类名 [<>] ([形参表]);

MyArrayList<String> my1 = new MyArrayList<>();

泛型参数T 作用于编译期:类型推导、类型安全检测
运行期:类型擦除 ->运行期变成了object类型

泛型接口:

泛型接口的定义形式是:

interface 接口名{
// body
}

在实现接口时,也应该声明与接口相同的类型参数 T

class 类名 implements 接口名{
// body
}

泛型方法:

与当前类是否是泛型无关,在定义方法时声明了类型参数,只限于在该方法中使用。泛型方法既可以定义在泛型类中,也可以定义在非泛型类中。
在返回值前面加

public class test{
   public static <T>void swap (T[] arr,int index1,int index2){
      T temp =arr[index1];
   }
}

若要将类定义成泛型,则需要先生成对象,才能知道 T 的类型,进而进行调用,而static关键字与方法无关,则需要在static后加上 , 定义为静态方法。

类型擦除
类型限定:
extends主要限定泛型参数的上界
<T extends 基类> :T 只能是基类或基类的派生类
<T extends 基接口>:T只能是实现基接口的派生类
<类型参数 extends comparable <类型参数>>
泛型参数:不满足 向上造型

错误:MyArrayList my = new MyArrayList();
正确:MyArrayList<?> my = new MyArrayList();

泛型注意点:
1.泛型参数 必须为引用数据类型或基本数据类型的包装类(eg: integer)
2.不能new 泛型数组

错误:element = new T[number];
正确: element = (T[]) new Object[number];
MyArrayList =(T[])new Object[number];

  1. 不能new 泛型对象 new T(); (因为在堆上开辟内存,无法知道对象类型,所以无法开辟)

通配符

由 " ?"表示,它代表一个未知类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值