java - 如何声明 Java 对象列表,其中每个对象都实现 Comparable

标签 java generics

情况是这样的...

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

我不会预先知道列表中的对象类型。然而,通过这个列表的使用方式,我保证 Comparable 的合约这样列表中的每个项目都具有相同的类型并且能够相互比较。

换句话说,在某些情况下,真实类型最终将是 String ,在其他情况下,Date 。在其他情况下,某些东西 Customimplements 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/

相关文章:

java - 如何使用 Java、AJAX 使用 Rest Web 服务从 MySQL 数据库检索数据并放置在 HTML 表单中

java - 这段代码告诉计算机做什么 Lights[k] = !lights[k];?

scala - 用于转换为并行集合的通用类型参数

scala - Scala 中的 ADT 子类型化

arrays - 当元素明显受限时,为什么 Swift 编译器在推断我的通用元素的类型时会抛出错误?

java - 无法安装android sdk包

java - 项目欧拉问题 - 1 没有返回我期望的值

java - 如何修改 net.schmizz.sshj 日志级别?

java - 如何从传递的对象中检索值?

java - 通用工厂定义选项