java - 在这种情况下如何声明 Java Comparable

标签 java generics

这是我正在学习的类(class):

public class Thing<T extends Comparable<? super T>> {
   private Map<String, List<SourcedValue<T>>> properties;
}

然后,SourcedValue是这样的:

public class SourcedValue<T extends Comparable<? super T>> 
                         implements Comparable<****?*****> {
  private T value;
  private List<Sources> sources;

  @Override
  public int compareTo(SourcedValue<****?****> other) {
    return value.compareTo(other);
  }
}

我应该在***?***中放入什么?

我需要做的是对 List<SourcedValue<T>> 进行排序在 Thing在一些创建 Thing 的转换方法中并填充 它的properties ,(以及每个属性的 List<SourcedValue<T>>)。

最佳答案

我不确定这是否会对您有帮助,但这是我认为实现您的要求的一种方法。如果这对您有帮助,我会很高兴。

public class SourcedValue<T extends Comparable<? super T>>
    implements Comparable<SourcedValue<? super T>> {
private T value;
private List<Integer> sources;

@Override
public int compareTo(SourcedValue<? super T> o) {
    return value.compareTo((T)o.value);
    }
}

此外,使用 super 在这里似乎是多余的。即使下面的解决方案也应该产生相同的结果

public class SourcedValue<T extends Comparable<T>>
    implements Comparable<SourcedValue<T>> {
private T value;
private List<Integer> sources;

@Override
public int compareTo(SourcedValue<T> o) {
    return value.compareTo(o.value);
}
}

关于java - 在这种情况下如何声明 Java Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498727/

相关文章:

java - SFTP 在服务器上运行时无法工作,但通过驱动程序运行时可以

java - 如果我关闭了一个ServerSocket,那么ServerSocket接受的Sockets是否也会被关闭?

java - 在下面的示例中, "List<? extends T>"是必要的吗?或者 "List<T>"会做同样的事情吗?

c# - 是否可以在引入其他泛型类型的泛型类上使用构造函数?

C# .NET 4.0 和泛型

java - GWT/Gin Presenter 实例化

java - vaadin 在键盘事件上删除行

java - 为树中的叶子分配不同的值

generics - 处理惯用函数链中的空列表

java.util.Optional 和 java.lang.Class - 奇怪的行为