【发布时间】:2017-10-29 15:17:34
【问题描述】:
我是 Groovy 的新手,之前我只学过 C# 和 C++,所以我在习惯 Java 时遇到了一些问题,尤其是我们在项目中使用的 Groovy。所以这个问题涉及到 Groovy。
我正在尝试:
- 创建一个新类 X:
class X {
double val
}
- 为 X 类的变量重载基本运算符(+、-、*、/、** 等)
问题是: - 在 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
也许有办法将方法添加为访问元类的闭包?
不幸的是,数组示例是我在互联网上找到的最接近的答案。希望有办法!
【问题讨论】:
标签: java groovy operator-overloading metaclass