class和 class類型 有什麼區別

平時看java源代碼的時候,若是碰到泛型的話,我想? T K V E這些是常常出現的,可是有時想不起來表明什麼意思,今天整理下: 

? 表示不肯定的java類型。
T 表示java類型。
K V 分別表明java鍵值中的Key Value。
E 表明Element。

Object跟這些東西表明的java類型有啥區別呢?
Object是全部類的根類,是具體的一個類,使用的時候多是須要類型強制轉換的,可是用T ?等這些的話,在實際用以前類型就已經肯定了,不須要強制轉換。
追問:
也就是說,這個方法能知道返回的是哪一種類型(父類),就用T行了?若是徹底不知道的就用?用T的獲得的對象就不須要類型轉換了,而用?的就必需用強轉了!
追答:
第一種是固定的一種泛型,第二種是隻要是Object類的子類均可以,換言之,任何類均可以,由於Object是全部類的根基類
固定的泛型指類型是固定的,好比:Interge,String. 就是<T extends Collection>

<? extends Collection> 這裏?表明一個未知的類型,
可是,這個未知的類型其實是Collection的一個子類,Collection是這個通配符的上限.
舉個例子
class Test <T extends Collection> { }

<T extends Collection>其中,限定了構造此類實例的時候T是一個肯定類型(具體類型),這個類型實現了Collection接口,
可是實現 Collection接口的類不少不少,若是針對每一種都要寫出具體的子類類型,那也太麻煩了,乾脆還不如用
Object通用一下。
<? extends Collection>其中,?是一個未知類型,是一個通配符泛型,這個類型是實現Collection接口便可。

_________________________上面講的是什麼鬼,當你知道引入通配符泛型的由來以後(下面代碼由java1234.com提供)_________________________________________________________________________________________

The method take(Animal) in the type Test is not applicable for the arguments (Demo<Dog>)
The method take(Animal) in the type Test is not applicable for the arguments (Demo<Cat>)
The method take(Animal) in the type Test is not applicable for the arguments (Demo<Animal>)

當引入泛型以後,遇到這種狀況,參數怎麼寫都不適合,總有2個方法不適用,爲了給泛型類寫一個通用的方法,這時候就須要引入了 ?通配符的概念。


 
  
複製代碼
public class Demo <T extends Animal>{

    private T ob;

    public T getOb() {
        return ob;
    }

    public void setOb(T ob) {
        this.ob = ob;
    }

    public Demo(T ob) {
        super();
        this.ob = ob;
    }
    
    public void print(){
        System.out.println("T的類型是:"+ob.getClass().getName());
    }
}
複製代碼
相關文章
相關標籤/搜索