Comparable vs Number,设计选择

Comparable vs Number, Design choice

我有一个 class,它的结构类似于

class A {
    String key;
    Double value;
}

现在的值可以是 double、long、int、fraction 等等。

我应该如何处理这个 class?

我应该将值设置为 Comparable 还是 Number

Number,因为这些值扩展了 Number,Comparable,因为我希望这个 class [和 value] 具有可比性。

我建议您使用泛型 <T extends Number>.

创建 class
class A<T extends Number> {
    String key;
    T value;
}

这仅取决于您想要或需要对值类型做出的假设:

  • 如果您只存储在每个使用上下文中固定的某种类型 T 的值,请选择通用类型 T
  • 如果实例在值类型方面需要灵活,只要求它是数字,则使用 Number
  • 如果需要比较值,请使用 Comparable
  • 如果您不需要对值进行任何特定假设,请使用 Object

您可以使用 generics 并且两者兼有

class A<T extends Number & Comparable<T>> {
    String key;
    T value;

    public A(String key, T value) {
        this.key = key;
        this.value = value;
    }
}

由于 Number 不是 Comparable,您可以使用 intersection types,如上所示,在类型参数 T(Integer、Long、Double)上会很满意这个,现在值是 NumberComparable

我还不能添加评论,所以...如果您按照 所说的进行操作,初始化将类似于 new A<Double>("a", 2.0d)。我个人更喜欢将值定义为 Number.