全部, 要测试我在下面创建的示例代码的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