Вызовите супер метод из операции 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()
метод. В конкретном классе ValueArray
Я хочу позвонить super.equals()
сравнивать общие поля базового класса, а затем делать сравнения, специфичные для конкретного класса.
Но Xcore жалуется на тот код, что это "Couldn't resolve reference to JvmIdentifiableElement super
".
Как я могу позвонить equals()
-метод из суперкласса?
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. Так я что-то упустил?