2013-05-20 20 views
2

如果有人能向我解釋爲什麼u = bar(u,r)在下面的代碼中不起作用,我會非常喜歡。我無法找到正確的解釋。作業不能以簡單的方式使用泛型

class R { 
} 

class U { 
} 

public class Foo { 

    public static <T> T bar(T x, T y) { 
     return x; 
    } 

    public static void main(String[] args) { 

     R r = new R(); 
     U u = new U(); 

     u = bar(u,r); // why is this not working? 
    } 
} 

UPDATE:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Type mismatch: cannot convert from Object to U 
+1

定義「不工作」。什麼是錯誤 –

+0

這段代碼是否可以編譯?您尚未將'R'和'U'定義爲''類型。 – thatidiotguy

+0

不,它不,我想知道爲什麼 – Blizzer

回答

7

當搞清楚使用的通用型T哪種類型時,Java在參數類型。

在這種情況下,參數ur是不同的,不相關的類型(UR)。

因此它們最接近的共同祖先是Object,所以返回類型將是Object,需要一個演員才能被分配到u

+0

感謝您的explenation,我會接受它;-) ...另一個短...如果我通過R延長U並嘗試這樣做u = r,爲什麼這不會編譯? – Blizzer

+0

如果你讓'U擴展R',那麼這段代碼試圖把一個'R'對象分配給一個'U'引用,它可以讓你在'R'上執行'U'特定的動作。換句話說,再次需要演員陣容。如果讓'R擴展U',代碼編譯就好了,因爲引用總是可以指向一個子對象而不需要強制轉換。 – Keppil

+0

非常感謝 – Blizzer