泛型


    在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型的几个例子

import java.util.Collection;

class Gen<T> {
	private T ob;  //定义泛型成员变量
	public Gen(T ob) {
		this.ob = ob ;
	}
	
	public T getob() {
	return ob;
	}
	
	public void showType() {
	System.out.println("T的实际类型是: " + ob.getClass().getName());
	}
}

public class GenDemo {
	public static void main(String[] args){
	//定义泛型类Gen的一个Integer版本
	Gen<Integer> intOb=new Gen<Integer>(88);
	intOb.showType();
	int i= intOb.getob();
	System.out.println("value= " + i);
	System.out.println("----------------------------------");
	//定义泛型类Gen的一个String版本
	Gen<String> strOb=new Gen<String>("Hello Gen!");
	strOb.showType();
	String s=strOb.getob();
	System.out.println("value= " + s);
	}
} 

输出:

T的实际类型是: java.lang.Integer

value= 88
----------------------------------
T的实际类型是: java.lang.String
value= Hello Gen!
import java.util.ArrayList;
import java.util.Collection;

public class CollectionGenFoo<T extends Collection> {
	private T x;
	public CollectionGenFoo(T x) {
		this.x = x;
	}
	
	public static void main(String args[]) {
		CollectionGenFoo<ArrayList> listFoo = null;
		listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
		
		CollectionGenFoo<Collection> listFoo1 = null;
		listFoo1 = new CollectionGenFoo<Collection>(new ArrayList());
		
		CollectionGenFoo<? extends Collection> listfoo2 = null;//泛型通配符
		listfoo2 = new CollectionGenFoo<ArrayList>(new ArrayList());
		
		System.out.println("实例化成功!");
	}
}
注意:
  1、如果只指定了<?>,而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。
  2、通配符泛型不单可以向下限制,如<? extends Collection>,还可以向上限制,如<? super Double>,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。
  3、泛型类定义可以有多个泛型参数,中间用逗号隔开,还可以定义泛型接口,泛型方法。这些都泛型类中泛型的使用规则类似。


泛型方法

public class GenMethod {
	public <T> void f(T x) {
		System.out.println(x.getClass().getName());
	}
	
	public static void main(String[] args) {
	GenMethod ea = new GenMethod();
	ea.f(" ");
	ea.f(10);
	ea.f('a');
	ea.f(ea);
	}
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值