2016-11-21 43 views
-1

我正在學習java中的泛型。如下所述,我對2個樣本有點困惑。樣品之一是提到的兩個示例泛型有什麼區別?

public class TrickyName <X extends Object>{ 
    private X x; 
    public TrickyName(X x) { 
     this.x = x; 
    } 

    private double getDouble() { 
     return x.doubleValue(); 
    } 

    public static void main(String args[]) { 
     TrickyName<Integer> a = new TrickyName<Integer>(new Integer(1)); 
     System.out.print(a.getDouble()); 
    } 
} 

樣品2

public class TrickyName <X extends Number>{ 
    private X x; 
    public TrickyName(X x) { 
     this.x = x; 
    } 

    private double getDouble() { 
     return x.doubleValue(); 
    } 

    public static void main(String args[]) { 
     TrickyName<Integer> a = new TrickyName<Integer>(new Integer(1)); 
     System.out.print(a.getDouble()); 
    } 
} 

提到樣品中,存在僅僅是一個延伸class.In第一樣品,我從Number延伸的第二樣品中的延伸對象差。我所理解的是X擴展對象意味着任何擴展對象(因爲每個類擴展對象)都可以這樣使用,所以在這裏使用Integer類,在第一個示例中使用getDouble()給出編譯錯誤,但是當我如前所述從Number類擴展在第二個樣本中起作用。爲什麼? Number類和整數類都從Object擴展。我錯了,請指導我。

回答

2

當你說X extends Object,這要求XObject(通常是一個安全的假設)的子類。當你說X extends Number時,那麼類型必須是更具體的Number類型。

Object沒有doubleValue()方法。 Number確實有Number.doubleValue()這就是爲什麼這是有效的。

+0

啊......現在明白了......感謝您的迴應。 –