这可能吗?如果没有,为什么这不可能在Java?
interface B extends A {}
public List<B> getList();
List<A> = getList(); // Type mismatch: cannot convert from List<B> to List<A>
Run Code Online (Sandbox Code Playgroud)
在下面的示例代码的两个班EventA,并EventB都实现了interface Historical.Java可以自动转换一个EventA或EventB到Historical当这些对象中的一个作为参数被传递,如在examineEvent下面的方法.但是,当引入泛型时,Java不再能够进行转换,即.from List<EventA>to List<Historical>- 除非findClosestValidEventIndex使用声明目标函数(在本例中)List<? extends Historical>.
有人可以解释为什么一定是这样吗?在我看来,泛型中接口的使用应该自动暗示<? extends Interface>.
public class SampleApplication {
public interface Historical {
public DateTime getDate();
}
public static class EventA implements Historical {
private DateTime date;
@Override
public DateTime getDate() {
return date;
}
}
public static class EventB implements Historical {
private DateTime date;
@Override
public DateTime getDate() {
return date; …Run Code Online (Sandbox Code Playgroud)