2015-01-20 15 views
1

У меня есть следующие объявления в 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. Так что я чего-то не хватает?

+1

Спасибо за ответ. Я также спросил Эд на форумах сообщества Eclipse, и он упомянул, что раньше было несколько ошибок, связанных с супер. И поскольку я использую более старую версию (поскольку целевая платформа моего клиента еще не обновлена), это может быть причиной. У меня не было времени для двойной проверки с новой версией, но я буду придерживаться теории ошибок до тех пор, пока не будет доказано обратное, и дайте вам кредит на ответ. В качестве обходного пути я реализовал супер-логику в каждом подклассе. Отстой, но что вы можете сделать ;-) –