Java:添加两个相同类型的值,其中两个值都是Java.lang.Number的子类

Java:添加两个相同类型的值,其中两个值都是Java.lang.Number的子类,java,Java,我想要一个如下所示的构造函数 public Attribute(String attrName, Number attrValue){ this.name = attrName; this.value = attrValue; } 在本文中,我希望有一个名为incrementValue(数字n)的方法,它将n添加到值中。我知道您无法将两个数字对象添加到一起,因为可能存在铸造问题。但是,如果我使用检查来保证值和n是相同的类型,是否可以将它们相加?或者也许有更好的方法来解决这个问题

我想要一个如下所示的构造函数

public Attribute(String attrName, Number attrValue){
    this.name = attrName;
    this.value = attrValue;
}
在本文中,我希望有一个名为incrementValue(数字n)的方法,它将n添加到值中。我知道您无法将两个数字对象添加到一起,因为可能存在铸造问题。但是,如果我使用检查来保证值和n是相同的类型,是否可以将它们相加?或者也许有更好的方法来解决这个问题

现在我正在声明Integer和Double的实例变量,并将值赋给正确的类型。我想知道如何扩展它以允许数字的任何子类。显然,我可以为每个方法编写单独的方法,但这似乎是糟糕的编程


这在java中可能吗?我完全弄错了吗?

不,这在Java中是不可能的。你所能做的最好的事情就是把你所知道的
Number
的所有案例都通读一遍

我当然可以编写一个不可能的
Number
子类,尽管这是一个有点荒谬的实现。

您可以(
double
损耗最小):

但在我看来,你最好只是重载构造函数<代码>数字在我的经验中并不是一门非常有用的课程


使用抽象超类
Number
的理由是什么。你是否在你的继承权下使用具体的子类?@Perception我想允许尽可能多的类型,因为这是为了练习/娱乐,以后可能会扩展。这正是我现在拥有的。我希望允许使用BigInteger、BigDecimal、Byte等。在为每种类型创建incrementValue()方法后,代码都需要大量的复制粘贴。实际上,考虑一下,是否有充分的理由包括其他类型?我认为这可能存储在数据库中,并且我认为可能需要允许所有类型。要添加
biginger
bigdoull
,必须使用。您不能使用
+
。我会重新考虑你的设计,以及你是否真的需要支持每一种可能的数字类型。我已经编写了许多将数字存储在数据库中的应用程序,我从来没有一次需要编写像你所尝试的那样的东西。比如说,95%的时候,你只需要
int
(或者
long
)和
double
。几乎可以肯定的是,没有令人信服的理由来混合数字类型或像您尝试的那样通用地编写它。所以不,我看不出一个原因(除非你给出一个原因)可能在数据库中存储一个数字意味着你必须“允许所有类型”。是的,我是个脾气暴躁的人。最初我使用的是对象而不是原语,因为我对不同的类型使用了多个实例变量,希望允许值0,但仍然检查初始化了哪个值。显然是有缺陷的思维,我想我会采用你给出的方法,并将其整合为一种类型。
class Attribute {

    private double value;

    public Attribute(String attrName, Number attrValue) {
        this.name = attrName;
        this.value = attrValue.doubleValue();
    }

}
class Attribute {

    public Attribute(String attrName, int attrValue) {
        this.name = attrName;
        this.value = attrValue;
    }

    public Attribute(String attrName, double attrValue) {
        this.name = attrName;
        this.value = attrValue;
    }
}