JDK1.5新特性一之泛型(Generics)

    有人会疑问,泛型是什么东东? 引用官方的话来讲: java

    泛型就是:“the type system allows a type or method to operate on objects of various types while providing compile-time type safety. It adds compile-time type safety to the Collections Framework and eliminates the drudgery of casting”。看不明白吗??不要紧,下面我就给你们解释一下个人理解(注:是个人理解,若是你表达的更好,欢迎指正~)。 函数

    说白了,jdk中加入了泛型,可让咱们省去类型强制转换的工做,同时加到编译时异常中来;再说白一点,就是你使用了泛型以后,不用再作强制类型转换了,同时若是你的赋值对象不匹配,那么编译器会警告你这里出错了,而不用再等到程序运行时报了一个ClassCastException的时候才发现代码有问题了。不知道我说的这么白白了,你明白了没有,尚未明白,那请往下看.... 测试

    好比,以前咱们想要在操做集合类中的对象是这样写:    this

static void expurgate(Collection c) {
	for (Iterator i = c.iterator(); i.hasNext(); ){
	  if (((String) i.next()).length() == 4){
			i.remove();
		}
	}
}

    看着这么多的括号你头疼了吗??反正我是晕了~来看看使用泛型以后的代码: spa

static void expurgate(Collection<String> c) {
	for (Iterator<String> i = c.iterator(); i.hasNext(); ){
		if (i.next().length() == 4){
			i.remove();
		}
	}
}

    感受没有少什么东西,不过清析了不少,没错!这就是泛型的一个简单的应用。可让咱们在从集合中取元素的时候再也不作讨厌的强制类型转换,也不用担忧我转换的类型是否是集合里面存储的类型,用一个字来形容,啊~~~(擦,不要想多了)。 code

    其实,只是上面单纯的这些,还不足以让我如此的激动,泛型还能够应用在方法的参数里,那是什么概念?直接上代码:     对象

/**
 * 参数使用泛型
 */
public static <T> void testParam(T param){
	System.out.println(param);
}
public static void main(String[] args) {
		testParam(2f);
		testParam("test");
		testParam(123);

}  
运行结果: 2.0
         test
         123

    观众朋友们看出什么来了吗??没错,就是我testParam方法的参数使用了一个泛型,那么这样用有什么好处呢?那就是:本身体会去吧~ rem

    其实,只是上面的这些情景,不足以让我如此的激动,泛型还能够用在返回值上(啊??你说什么~~),没错,泛型也能够用在返回值类型上。代码以下:  编译器

/**
 * 返回值使用泛型
 */
public <E extends Comparable<E>>E retunGenerics(E e1, E e2){
	E t = e1;
	if(e2.compareTo(e1) > 0	){
		t = e2;
	}
	return t;
}    

    这时候,你是否是也已经开始暗爽了呢,那你猜我下面要说些什么呢?没错,恭喜你答对了 it

    其实,只是上面的这些情景,还不足以让我如此的激动。泛型还能够用在类上(oh,shit!),代码以下:

public class GenericsType <T>{

	private T t ;
	
	public GenericsType(T t){
		this.t = t ;
	}
	
	public void printValue(){
		System.out.println(t);
	}
}

    好,这时候若是我调用构造函数进行对象初始化的时候,会有什么不一样呢??我写了一下

/**
 * 测试泛型类
 */
@Test
public void testGenericsType(){
	GenericsType<Integer> gt = new GenericsType<Integer>(10);
	gt.printValue();
	GenericsType<String> gt1 = new GenericsType<String>("test");
	gt1.printValue();
}

    想知道结果是什么吗??那大家回去本身试一下吧,若是你对上面的内容已经掌握,我想你已经知道结果了~

    好了,说了这么多,不知道观众朋友们在使用泛型上有没有一点本身的想法啦??若是有好的想法,说出来哈!~

     Thank you ~

            goodbey ..

                    &(#$)#Q&$)(&#)($#W*)@$%^^^^^^****

相关文章
相关标签/搜索