是否可以使 Java 对象 'reflect' 成为原始类型?
Is it possible to make a Java object 'reflect' a primitive type?
假设我有以下 class:
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已经有这个功能了。那么(我们如何添加它 | 为什么我们不能添加它)到我们自己的 classes?
我们不能。在 Java 中,无法重载内置运算符。
您提到这对包装器类型(如 Integer
、Double
等)有效,但这并不完全正确。当运算符应用于此类类型时,将在后台启动一个称为拆箱的过程,以便 Double
变为 double
,Integer
变为 int
等等。
正如其他人提到的,这称为 运算符重载 ,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);
等等...
我认为这与您的要求最接近。
假设我有以下 class:
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已经有这个功能了。那么(我们如何添加它 | 为什么我们不能添加它)到我们自己的 classes?
我们不能。在 Java 中,无法重载内置运算符。
您提到这对包装器类型(如 Integer
、Double
等)有效,但这并不完全正确。当运算符应用于此类类型时,将在后台启动一个称为拆箱的过程,以便 Double
变为 double
,Integer
变为 int
等等。
正如其他人提到的,这称为 运算符重载 ,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);
等等...
我认为这与您的要求最接近。