Java泛型-重写返回集合的函数<;T>;

Java泛型-重写返回集合的函数<;T>;,java,generics,Java,Generics,这项工作: public interface A { A doSomething(); } public interface B extends A{ B doSomething(); } 这并不是: public interface A { Collection<A> doSomething(); } public interface B extends A{ Collection<B> doSomething();

这项工作:

public interface A {
     A doSomething(); 
}

public interface B extends A{
     B doSomething(); 
}
这并不是:

public interface A {
     Collection<A> doSomething(); 
}

public interface B extends A{
     Collection<B> doSomething(); 
}
公共接口A{
收集剂量测定法();
}
公共接口B扩展了{
收集剂量测定法();
}
为什么??在第二个例子中,我能做些什么来获得我想要的功能

将其更改为:

public interface A {
    Collection<? extends A> doSomething();
}

public interface B extends A{
    Collection<B> doSomething(); 
}
公共接口A{

收集原因是
收集
不是
收集
的子类型

对于
集合
可能执行的操作,并非所有操作都可以在
集合
中执行。例如:调用
add(new a())
可以在
集合
中工作,但对于
集合
必须失败(即使在编译时刚刚检查过)

如果您不关心将元素添加到返回的
集合
(通常您只关心对它们进行迭代,有效地将它们视为只读),则可以执行以下操作:

public interface A {
     Collection<? extends A> doSomething();
}

public interface B extends A{
     Collection<? extends B> doSomething();
}
公共接口A{
收集试试这个

public interface A {
     Collection<? extends A> doSomething(); }
公共接口A{
收集