从 Xcore 操作调用超级方法
Call super method from Xcore operation
我在 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()
方法。在具体的classValueArray
中,我想调用super.equals()
来比较基础class的公共字段,然后再针对具体的class进行比较。
但是 Xcore 抱怨该代码“Couldn't resolve reference to JvmIdentifiableElement super
”。
如何从超级 class 调用 equals()
方法?
我不得不对您未在此处显示的代码做出一些假设,但简短的回答是它可以工作。您正确调用了 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 没有投诉。那我是不是漏掉了什么?
我在 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()
方法。在具体的classValueArray
中,我想调用super.equals()
来比较基础class的公共字段,然后再针对具体的class进行比较。
但是 Xcore 抱怨该代码“Couldn't resolve reference to JvmIdentifiableElement super
”。
如何从超级 class 调用 equals()
方法?
我不得不对您未在此处显示的代码做出一些假设,但简短的回答是它可以工作。您正确调用了 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 没有投诉。那我是不是漏掉了什么?