我是Groovy的新手,之前我只做过C#和C ++,所以我遇到了一些习惯于Java,特别是我们用于项目的Groovy的问题。所以这个问题与Groovy有关。
我想:
class X {
double val
}
问题是: - 在Groovy中,我可以为类X重载运算符,包括一个属性 - 值(即双精度)
X plus(X obj){
X newobj = new X(this.val + obj.val)
return newobj
}
和
X plus(double obj){
X newobj = new X(this.val + obj)
return newobj
}
但是,如果双重物体位于第一位(左手边),我该怎么办?像:
double a
X b
X result = a + b
// it will not work because operator + of a is not overloaded to provide addition of b
我是否需要重载这样的东西但是对于双重操作符?:
ArrayList.metaClass.plus << {Collection b ->
[delegate, b].transpose().collect{x, y -> x+y}
}
正如所说的那样
Overloading + operator for arrays in groovy
也许有办法添加一个方法作为闭包访问元类?
不幸的是,数组的例子是我在互联网上找到的最接近的答案。希望有办法!
答案 0 :(得分:0)
是的,您可以将其重新定义为Double:Double.metaClass.plus = {...}
小心!在groovy
def d0 = 2.1
println d0.getClass() // java.math.BigDecimal
double d1 = 2.1
println d1.getClass() // java.lang.Double