Dav*_*gan 8 java sorting generics
我有一组所有共享一些共同属性的类,所以我将它们都扩展为一个公共基类BaseEntity.所以我有,例如Foo extends BaseEntity和Bar extends BaseEntity.
我也希望这些Foo和Bar对象的列表可以排序,所以我已经实现了Comparable.我将类定义为Foo extends BaseEntity implements Comparable<Foo>和Bar extends BaseEntity implements Comparable<Bar>,并且按照预期对Foos或Bars 列表进行排序- 当然,排序的细节在不同的子类中是不同的.但是,当我事先不知道我是否会有Foos或Bars 时,我无法弄清楚如何进行分类工作.例如,此代码无法编译:
public class UtilityClass<T extends BaseEntity> {
...bunch of stuff...
List<T> values;
public List<T> sort() {
Collections.sort(values);
return values;
}
...more methods...
}
Run Code Online (Sandbox Code Playgroud)
带有错误消息 Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<T>). The inferred type T is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>
我认为问题在于我试图对BaseEntity对象列表进行排序,而这BaseEntity本身并没有实现Comparable.但现在我面临一个问题:唯一明智的事情,使BaseEntity物体相媲美的其他BaseEntity对象,但是当我添加implements Comparable<BaseEntity>到BaseEntity,编译器告诉我,我有问题,因为现在我的Foo阶级是试图实现两者Comparable<BaseEntity>和Comparable<Foo>,这显然是不允许.
我知道我可以通过放弃implements Comparable<Foo>并且只是实现来回避这个问题Comparable<BaseEntity>,但是我的compareTo方法将不得不做丑陋的转换,我认为这正是使用泛型应该避免的那种问题.
我真正想要做的是在签名中指定BaseEntity它的所有子类Comparable,但仅限于同一子类的实例.
感激地收到任何帮助.谢谢!
使用交集类型,如下所示:
public class MyList<T extends BaseEntity & Comparable<T>> {...}
Run Code Online (Sandbox Code Playgroud)
这指定T必须既是a BaseEntity 又 Comparable是自身.