可比数字与数字,设计选择

时间:2016-05-11 20:16:53

标签: java abstract-class generic-programming

我有一个类似

的类
class A {
    String key;
    Double value;
}

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

我应该如何在同一个班级处理这个问题?

我应该将值设为ComparableNumber吗?

数字,因为这些值正在扩展数字,可比较,因为我希望这个类[和值]具有可比性。

4 个答案:

答案 0 :(得分:4)

我建议您使用通用类型<T extends Number>创建类。

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

答案 1 :(得分:2)

您可以使用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(整数,长整数,双数)会对此感到满意,现在价值是NumberComparable

答案 2 :(得分:1)

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

  • 如果您只存储在每个使用环境中固定的某种类型T的值,请转到通用类型T
  • 如果实例需要在值类型方面具有灵活性,只需要它是数字,请使用Number
  • 如果需要比较值,请使用Comparable
  • 如果您不需要对值进行任何特殊处理,请使用Object

答案 3 :(得分:1)

我无法添加评论,所以......如果按照Andrew's Answer的说法进行操作,那么初始化就像new A<Double>("a", 2.0d)一样。我个人更喜欢将值定义为Number