2015-01-20 7 views
1

내가 개 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 Community Forums)에서 에드에게 물어 보았습니다. 그는 이전에 super와 관련된 몇 가지 버그가있었습니다. 그리고 이전 버전을 사용하고 있기 때문에 (내 고객의 대상 플랫폼이 아직 최신 버전이 아니기 때문에) 이것이 원인 일 수 있습니다. 나는 새 버전으로 다시 확인해야 할 시간이 없었지만, 달리 입증 될 때까지 버그 이론에 충실하게 답하고 그에 대한 크레딧을 줄 것입니다. 이 문제를 해결하기 위해 모든 하위 클래스에서 수퍼 로직을 구현했습니다. 엿 같은데, 뭘 할 수 있니 ;-) –