假设我有以下课程:
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这样的类已经具有此功能。所以(我们怎么能把它添加到我们自己的类中为什么不能添加它?)
答案 0 :(得分:3)
我们不能。在Java中,没有可能的方法来重载内置运算符。
您提到这对包装器类型(例如Integer
,Double
等)有效,但这并不完全正确。当运算符应用于此类型时,在后台启动一个名为un-boxing的进程,以便Double
转为double
,Integer
转为int
等等。
答案 1 :(得分:2)
正如其他人所说,这称为运算符重载,并且Java不支持。另外,不要将其与Integer
和Double
的默认取消装箱混淆。
如果在对象上调用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);
依旧......
我认为这与你提出的问题最为接近。