Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可比vs数量、设计选择_Java_Abstract Class_Generic Programming - Fatal编程技术网

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;
    }
}