我在Xcore中有以下声明:
class ValueBase { ... }
class ValueArray extends ValueBase
{
int size
double [] values
String valueUnit
op boolean isValueEqual(Value v)
{
if (!(v instanceof IValueArray))
{
return false
}
val other = v as IValueArray;
return Iterables.elementsEqual(this.values, other.values);
}
op boolean equals(Value v)
{
return super.equals(v) && isValueEqual(v) &&
(v instanceof IValueArray) &&
Objects.equals(valueUnit, (v as IValueArray).valueUnit)
}
}
ValueBase
实现了自己的equals()
方法。在具体类ValueArray
中,我想调用super.equals()
来比较基类的公共字段,然后进行特定于具体类的比较。
但是Xcore抱怨该代码“Couldn't resolve reference to JvmIdentifiableElement super
”。
如何从超级类中调用equals()
- 方法?
答案 0 :(得分:1)
我不得不对这里没有显示的代码做一些假设,但简短的回答是它有效。您正确地呼叫super.equals
。但正如我所说,我不得不做出一些假设。所以这就是我对Xcore似乎很好的东西。
package soxcore
import com.google.common.base.Objects
import com.google.common.collect.Iterables
class ValueBase {
op boolean equals(Value v)
{
return true;
}
}
class ValueArray extends ValueBase, IValueArray
{
int size
op boolean isValueEqual(Value v)
{
if (!(v instanceof IValueArray))
{
return false
}
val other = v as IValueArray;
return Iterables.elementsEqual(this.values, other.values);
}
op boolean equals(Value v)
{
return super.equals(v) && isValueEqual(v) &&
(v instanceof IValueArray) &&
Objects.equal(valueUnit, (v as IValueArray).valueUnit)
}
}
class Value extends ValueBase
{
}
interface IValueArray {
double[] values
String valueUnit
}
没有来自Xcore的投诉。我错过了什么吗?