Java 可比vs数量、设计选择
我有一个类,它的结构如下Java 可比vs数量、设计选择,java,abstract-class,generic-programming,Java,Abstract Class,Generic Programming,我有一个类,它的结构如下 class A { String key; Double value; } 现在这个值可以是double,long,int,france等等 我应该如何在同一个类中处理这个问题 我应该将值设置为可比较的还是编号 数字,因为这些值是扩展数字,可比较,因为我希望此类[和值]可比较。我建议您使用泛型类型创建类 A类{ 字符串键; T值; } 这仅取决于您想要或需要对值类型做出的假设: 如果只存储在每个使用上下文中固定的某个类型的值,则选择泛型类型T 如果实
class A {
String key;
Double value;
}
现在这个值可以是double,long,int,france等等
我应该如何在同一个类中处理这个问题
我应该将值设置为可比较的还是编号
数字,因为这些值是扩展数字,可比较,因为我希望此类[和值]可比较。我建议您使用泛型类型创建类
A类{
字符串键;
T值;
}
这仅取决于您想要或需要对值类型做出的假设:
- 如果只存储在每个使用上下文中固定的某个类型的值,则选择泛型类型
T
- 如果实例在值类型方面需要灵活,只要求它是数字,请使用
Number
- 如果需要比较值,请使用
compariable
- 如果不需要对值进行任何特殊假设,请使用
Object
泛型
,并且两者都有
class A<T extends Number & Comparable<T>> {
String key;
T value;
public A(String key, T value) {
this.key = key;
this.value = value;
}
}
A类{
字符串键;
T值;
公共A(字符串键,T值){
this.key=key;
这个值=值;
}
}
由于
编号
不可比,因此您可以使用交叉点类型
,如上所示,类型参数T
(整数、长、双精度)会对此感到满意,现在值是编号
和可比我还不能添加注释,所以。。。如果您按照上面所说的做,那么初始化将类似于newa(“A”,2.0d)
。就我个人而言,我更喜欢将值定义为Number
,所以如果我像A(“A”,2.0d)那样实例化,这将如何处理?应该是新的A(“A”,2.0)
或新的A(“A”,2d)
。您缺少
。指定2.0d
有点过分了,因为2.0
和2d
都是double
文本。@NooB8374,如果你调用一个构造函数(ao=newa(“a”,2.0d);
),它会工作得很好(自动装箱正在运行)(Andreas,谢谢)@Andreas,你错过了2。
:)@AndrewTobilko你说得对。不过,我想我从没见过有人这么做。(除了你,现在)你将如何使用它Comparable
对我来说似乎是一个奇怪的选择……如果你想让这个类具有可比性,你应该说class A实现了Comparable
。为什么不将值存储为BigDecimal
?
class A<T extends Number & Comparable<T>> {
String key;
T value;
public A(String key, T value) {
this.key = key;
this.value = value;
}
}