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*)@$%^^^^^^****

相關文章
相關標籤/搜索