为实现接口的类强制实施返回类型
如何强制实现类中的方法 getFoo() 返回同一实现类类型的列表。
public interface Bar{
....
List<? extends Bar> getFoo();
}
现在,实现 Bar 的类返回实现 Bar 的任何类的对象。我想让它更严格,以便实现Bar的类在getFoo()中返回仅其类型的对象列表。
如何强制实现类中的方法 getFoo() 返回同一实现类类型的列表。
public interface Bar{
....
List<? extends Bar> getFoo();
}
现在,实现 Bar 的类返回实现 Bar 的任何类的对象。我想让它更严格,以便实现Bar的类在getFoo()中返回仅其类型的对象列表。
不幸的是,Java的类型系统无法强制执行这一点。
但是,您可以通过使用以下命令来非常接近:
public interface Bar<T extends Bar<T>> {
List<T> getFoo();
}
然后你的实现类可以像这样实现它:
public class SomeSpecificBar implements Bar<SomeSpecificBar> {
// Compiler will enforce the type here
@Override
public List<SomeSpecificBar> getFoo() {
// ...
}
}
但没有什么能阻止另一个类这样做:
public class EvilBar implements Bar<SomeSpecificBar> {
// The compiler's perfectly OK with this
@Override
public List<SomeSpecificBar> getFoo() {
// ...
}
}
这在Java中是不可能的,但您可能想知道在界面中强制执行此操作的用例是什么。
List<itself>