繁体   English   中英

如何声明每个实现的对象的Java List Comparable

[英]How to declare Java List of Object where each one implements Comparable

这是情况...

我有一个List<Object> ,必须将其传递到代码的相当通用的部分。 在某些部分中,列表需要排序。

我不会预先知道列表中是什么类型的对象。 但是,通过使用此列表的方式,我保证Comparable的合同使列表中的每个项目都是同一类型,并且可以相互比较。

换句话说,在某些情况下,实际类型最终将为String ,而在其他情况下,则为Date 在另一些情况下,一些Custom认为implements Comparable<Custom>

但是,在每种情况下,如果实际类型为String ,则列表中的所有项目都将为String类型。

让我更具体地说明一下这个问题...

这是我正在研究的课程:

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 由于Comparable充当消费者,因此PECS(生产者扩展,消费者超级)建议对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.
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM