我在一个意想不到的情况下遇到了类型不匹配错误。
public interface I {}
public abstract class C {}
public class A extends C implements I {}
public class B extends C implements I {}
public class Foo {
public <T extends C & I> T getComposition(String selector) {
switch (selector) {
case "a": return new A(); // type-mismatch!
case "b": return new B(); // type-mismatch!
}
}
}
为什么既是C
又是I
的A
不能作为T
返回?
foo.<Hello>getComposition()
,这个方法应该返回一个Hello
类的实例,但它返回了一个A
类的实例。A
继承了C
和I
接口,而T
也是同样。但这并不意味着T
和A
是同一个类。 - JB Nizet