全部, 要測試我在下面創建的示例代碼的Java泛型類型推斷。Java泛型類型推斷混淆
public static <U> U addBox2(U u1, U u2) {
return u2;
}
static interface A {}
static interface B {}
static class S {}
static class C extends S implements A,B {}
static class D extends S implements B,A {}
如果你看到上面的A和S沒有任何關係。
在下面的代碼 -
A a = addBox2(new C(),new D());
我希望能收到編譯錯誤,因爲推斷出的類型是S和我將其分配給A和A和S有沒有關係還是這只是正常工作。
有人可以幫我解釋爲什麼這種行爲?
A和S沒有關係,但既然你將C和D傳遞給方法,並實現A(和B)他們有一些共同點,即它們都是As。除此之外,您傳遞的所有內容都將是一個「對象」,並且這將是最不常見的分母。 – Thomas
你爲什麼認爲它會輸入'S'?爲什麼你忽略實現的接口'A'和'B'? – Tom
我使用IntelliJ IDEA進行開發,IDEA向我顯示T被推斷爲S.可能是IntelliJ向我展示了錯誤的東西。 – user3616964