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{
收集