Java学习笔记(九)

泛型(Generic)

类型安全,Java泛型只在编译阶段有效:在编译过程中,正确检查泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段

泛型类

class A<T>{
	private T key;
	public void setKey(T key) {
		this.key=key;		
	}
	public T getKey() {
		return this.key;
	}
}

A<string> a=new A<String>();
A a=new A(); //不指定泛型相当于指定了Object类型

泛型方法

class C<E>{
	private E e;
	
	public static <T> void test3(T t){
	//静态方法中不能使用类定义泛型,只能使用静态方法自己定义的泛型
		System.out.println(t);
	}
	
	public <T> void test(T s){
		//在类中定义的泛型也可以在普通方法中使用
		System.out.println(this.e); 
		T t=s;
	}
	public <T> T test1(T s){
		return s;
	} 
	public <T> void test2(T...  strs){
		for(T s:strs){
			System.out.println(s);
		}
	}
	
}

public class Test1{
	public static void main(String[] args){
		C<Object> c=new C<Object>();
		//泛型方法,在调用之前没有固定的数据类型
		//在调用时,根据传入的参数类型将泛型改为此类型
		c.test1(2);
		c.test1(true);
	}
}

泛型接口

interface IB<T>{
	T test(T t);
}
//未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需要将泛型的声明一起加到类中
class B1<T> implements IB<T>{
	
	@Override
	public T test(T c){
		return t;
	}
}
//如果在实现接口时指定泛型的类型
class B2 implements IB<String>{
	@Override
	public String test(String t){
		return t;
	}
}

泛型通配符

class Dd{
	//需要一个List集合,但不确定List集合到底存的是什么数据类型
	public void test(List<?> list){
	}
}

有限制的通配符

  • <? extends class> class及其子类
  • <? super class> class及其父类
  • <? extends interface >接口及其实现类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值