从Xcore操作调用super方法

时间:2015-01-20 10:38:04

标签: super eclipse-emf emf eclipse-emf-ecore 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 个答案:

答案 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的投诉。我错过了什么吗?