JAVA中泛型

1 什么是泛型?

Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常。
泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型。
相关术语:
· ArrayList中的E称为类型参数变量
· ArrayList中的Integer称为实际类型参数
· 整个称为ArrayList泛型类型
· 整个ArrayList称为参数化的类型ParameterizedType

2 特点

· 代码更加简洁【不用强制转换】
· 程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】
· 可读性和稳定性【在编写集合的时候,就限定了类型】
。 泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。

3 代码块

泛型方法

public class Demo {
	public static void main(String[] args) {
	  	//在集合中的使用。定义集合是,确定及和内部元素锁定类型。
	  	List<String > list = new ArrayList<>();
	  	list.add("abc");
//  		list.add(10);//类型检查。
		for(int i = 0;i<list.size();i++){
	   		System.out.println((String)list.get(i));
	  	}
		//调用方法
	  	show("abc");
	  	show(true);
	  	show(123);
	  	show(13.2);
	}
	 //方法泛型
	 private static <T> void show(T t) {
  		System.out.println(t);
 	}
}
	

泛型类

public class InterImpl<T> implements Intrt<T> {
	@Override
	 public void show(T t) {
  	System.out.println();
  	}
  	public static void main(String[] args) {
  		//测试一
  		InterImpl<String> i = new InterImpl();
  		i.show("hello");
  		//测试二
  		//Inter<String> ii  = new InterImp<>();
  	}
}

泛型接口

public interface Intrt<T> {
 	public abstract void show(T t); 
}
接口实现类
public class Test implements Intrt<String>{
	@Override
 	public void show(String s) {
  		System.out.println(s);
  	}
}

4 类型通配符

//通配符上限
public void test(List<?> list){
	//List集合装载的是Integer,可以调用该方法        
	List<Integer> integer = new ArrayList<>();        
	test(integer);
	//List集合装载的是String,在编译时期就报错了
	List<String> strings = new ArrayList<>();
	 test(strings);
}
public static void test(List<? extends Number> list) {
}
//通配符下限
public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));    
}

在泛型的上限和下限中有一个原则:PECS(Producer Extends Consumer Super)书上是这样写的:
带有子类限定的可以从泛型读取【也就是—>(? extend T)】-------->Producer Extends
带有超类限定的可以从泛型写入【也就是—>(? super T)】-------->Consumer Super

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值