泛型

泛型

定义

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,在用到的时候指定具体的类型。
这种参数类型可以使用在类,接口和方法的创建中,分别称为泛型类,泛型接口和泛型方法,泛型的类型将来传入只能是引用类型的,不能是基本类型的

只在编译期间起作用

java中的泛型只是在编译期间启动类型安全检查的作用,在运行时不起作用

泛型类

一个泛型类就是具有一个或者多个类型变量(把类型参数化)的类。
定义一个泛型类只需要在类名后面加上<>,再在里面加上类型参数

泛型接口

一个泛型接口就是具有一个或者多个类型变量的接口。同样定义个泛型接口只需要在接口名后面加上<>,再在里面加上类型参数

泛型方法

在方法上直接声明泛型,这个方法就是泛型方法,如果传入方法的参数是类型变量,那么需要在返回值类型前面加上<>,再在里面加上类型参数。

public class Test{
			public <T> void run1(T t){
			
			}

			public <T> T run2(T t){
				return t;
			}

			public <T,S> void run3(T t,S s){
		
			}
		}

通配符

泛型中?是通配符,它表示所有泛型的父类型.
List<?> list = new ArrayList<任意>();
这时list可以指向任何泛型的List类型集合对象.

extends和super

在泛型中可以使用extends和super关键字来表示将来用户所传的泛型参数的上下限。

extends关键字的使用

public class Point<T extends Number> {
			private T x;
			private T y;
		}

表示传入的泛型参数T只能是Number类及其子类。

在声明泛型方法时使用extends

public <T extends Action> void run(T t){
		
		}

在声明泛型类型变量时使用extends

public void test(List<? extends Number> list){
		
		}
main:
List<? extends Number> list = new ArrayList<Integer>();
List<? extends Number> list = new ArrayList<Long>();
List<? extends Number> list = new ArrayList<Double>();

super关键字的使用
声明泛型类和泛型接口的时候不能使用super
声明泛型方法时不能使用super。
声明泛型变量时候可以使用super。

List<? super Number> list1 = new ArrayList<Object>();//声明泛型类型变量
void run(List<? super Number> list) {
    	
    }

泛型中的&

使用&可以给泛型加多个限定

public class Point<T extends A&B> {
	
}
class Sub extends A implements B{}

不管这个限定是类还是接口,都使用关键字extends,可以使用&符号给出多个限定,如果这个限定既有接口又有类,那么只能有一个类并且放在首位。这个泛型类限定了将来所传入的类型必须是A的子类且同时是B的实现类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值