情况是这样的...
我有一个List<Object>
我必须将它传递到代码的相当通用的部分。在某些部分,列表需要排序。
我不会预先知道列表中的对象类型。然而,通过这个列表的使用方式,我保证 Comparable
的合约这样列表中的每个项目都具有相同的类型并且能够相互比较。
换句话说,在某些情况下,真实类型最终将是 String
,在其他情况下,Date
。在其他情况下,某些东西 Custom
那implements Comparable<Custom>
.
但是,在每种情况下,如果真实类型是 String
,列表中所有项目的类型均为 String
.
让我更具体地改进这个问题......
这是我正在学习的类(class):
public class Thing {
private Map<String, List<SourcedValue<Object>>> properties;
}
然后,SourcedValue
是这样的:
public class SourcedValue<T> {
private T value;
private List<Sources> sources;
}
那么,您建议我如何声明这一点?
最佳答案
您需要列表中的所有元素都可以Comparable
,而不仅仅是Comparable
,并且可以相互比较。在方法级别强制执行此操作的方法是声明一个与其自身具有 Comparable 绑定(bind)的类型变量。因为 Comparable
充当消费者,PECS (producer extends, consumer super)建议对 Comparable
本身的类型参数设置下限。
public <T extends Comparable<? super T>> void yourMethod(List<T> list) {
// Your implementation here.
}
根据您的具体情况,类型变量 T
可能位于类而不是方法上。
public class YourClass<T extends Comparable<? super T>> {
public void yourMethod(List<T> list) {
// Your implementation here.
}
}
关于java - 如何声明 Java 对象列表,其中每个对象都实现 Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56486386/