Вызовите супер метод из операции 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. Так я что-то упустил?

Другие вопросы по тегам