EMF를 사용하여 다양한 종류의 객체를 모델링했습니다. 이제는 어떤 종류의 객체라도 EList를 통해보고 싶습니다.이 EList에 객체가 포함되어 있는지 알고 싶습니다. 나를 위해 관심있는 모든 필드에 동일한 값 (equals 메서드에서 정의 됨). 문제는 내가 내 객체에 오버로드 된 equals 메서드를 사용하려고하지만 == 연산자가 아니라 동일한 객체 인 경우 true를 반환하는 연산자이지만 내 경우에는 새 객체를 만들고 필드를 설정하면됩니다. 같은 필드를 가지는이 오브젝트가 벌써리스트에 존재할지 어떨지 궁금합니다. EMF에서 ELIst의 동작을 변경할 수있는 설정이 있다면 아직 알지 못했지만 현재 다음 코드를 찾았습니다.이 메서드를 사용할 때마다 개체가 == EObjectList가 항상 false를 반환하는 useEquals 메서드를 오버로드하기 때문에 연산자. 나는 EList 또는 내가 일치를 수행 내 자신의 유틸리티 클래스를 작성해야하는 경우 동작을 변경할 수 있는지 아는 사람 않을 경우 EList (EMF)의 동작 변경
public class BasicEList<E> extends AbstractEList<E> {
/**
* Returns whether the list contains the object.
* This implementation uses either <code>equals</code> or <code>"=="</code> depending on {@link #useEquals useEquals}.
* @param object the object in question.
* @return whether the list contains the object.
* @see #useEquals
*/
@Override
public boolean contains(Object object)
{
if (useEquals() && object != null)
{
for (int i = 0; i < size; ++i)
{
if (object.equals(data[i]))
{
return true;
}
}
}
else
{
for (int i = 0; i < size; ++i)
{
if (data[i] == object)
{
return true;
}
}
}
return false;
}
}
public class EObjectEList<E> extends EcoreEList<E> {
--> Output skipped
@Override
protected boolean useEquals()
{
return false;
}
}
그래서 제 질문은? 당신은 같은 getter 메소드를 사용하면
가 :
yourObject.getYourReference();
당신은 같은 뒤에해야합니다 너무 늦지 않았습니다 경우
적어도 사용자 정의 할 방법이 없다고 생각합니다 (적어도 더러운 해킹은 아닙니다). 'org.eclipse.emf.ecore.EObject 인터페이스에 대한 설명서를 참조하십시오.'프레임 워크는 구현이 equals (Object) (또는 hashCode())를 전문으로하지 않으므로 "=="이 될 수 있다고 가정합니다. 평등성 테스트에 항상 사용됩니다. ' – execc
그런데 EList에 대해 반복하는 도우미 메서드를 작성하고 요소 인 경우 해당 요소를 지정된 EObject와 비교할 때 org.eclipse.emf.ecore.util.EcoreUtil # equals 또는 비교자를 사용하여 각 요소를 비교할 수 있습니다 당신을 위해 작성된 EObjects. – execc
빠른 응답을 보내 주셔서 감사합니다. 예, 지금 할 일은 똑같은 메서드를 정의하지만 equals 메서드를 대신 사용하는 유틸리티 클래스를 작성하십시오. – tom1991te