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)上会很满意这个,现在值是 Number
和 Comparable
我还不能添加评论,所以...如果您按照 所说的进行操作,初始化将类似于 new A<Double>("a", 2.0d)
。我个人更喜欢将值定义为 Number
.
我有一个 class,它的结构类似于
class A {
String key;
Double value;
}
现在的值可以是 double、long、int、fraction 等等。
我应该如何处理这个 class?
我应该将值设置为 Comparable
还是 Number
?
Number,因为这些值扩展了 Number,Comparable,因为我希望这个 class [和 value] 具有可比性。
我建议您使用泛型 <T extends Number>
.
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)上会很满意这个,现在值是 Number
和 Comparable
我还不能添加评论,所以...如果您按照 new A<Double>("a", 2.0d)
。我个人更喜欢将值定义为 Number
.