是否有可能使Java对象反映出来?原始类型?

时间:2015-03-11 14:18:13

标签: java object primitive-types

假设我有以下课程:

public class Value
{
    private String label;
    private double value;

    public Value(String label, double value)
    {
        this.label = label;
        this.value = value;   
    }

    public double getValue()
    {
        return this.value;
    }
}

现在给出以下实例:

Value v1 = new Value("first value", 5);
Value v2 = new Value("first value", 6);

是否有某种方法可以使用别名

double sum = v1.getValue() + v2.getValue();

double sum = v1 + v2;

像Double和Integer这样的类已经具有此功能。所以(我们怎么能把它添加到我们自己的类中为什么不能添加它?)

2 个答案:

答案 0 :(得分:3)

我们不能。在Java中,没有可能的方法来重载内置运算符。

您提到这对包装器类型(例如IntegerDouble等)有效,但这并不完全正确。当运算符应用于此类型时,在后台启动一个名为un-boxing的进程,以便Double转为doubleInteger转为int等等。

答案 1 :(得分:2)

正如其他人所说,这称为运算符重载,并且Java不支持。另外,不要将其与IntegerDouble的默认取消装箱混淆。

如果在对象上调用getter方法对你来说是一个大问题,我建议你创建一个方法的结合,如:

private double add(Value... values){
    double sum = 0;
    for(Value val: values) 
        sum += val.getValue();
    return sum;
}
private double multiply(Value... values){
    double product = 1;
    for(Value val: values) 
        sum *= val.getValue();
    return product;
}

依旧......

所以现在你可以做到

double sum = add(v1,v2,v3,v4);
double product = multiply(v1,v2,v3);

依旧......

我认为这与你提出的问题最为接近。