문제

백엔드에서 생성 된 모든 웹 서비스 스튜브는 이와 유사한 것과 비슷합니다.

private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj) {
    if (!(obj instanceof PropertyData)) return false;
    PropertyData other = (PropertyData) obj;
    if (obj == null) return false;
    if (this == obj) return true;
    if (__equalsCalc != null) {
        return (__equalsCalc == obj);
    }
    __equalsCalc = obj;
    boolean _equals;
    _equals = true && 
        ((this.key==null && other.getKey()==null) || 
         (this.key!=null &&
          this.key.equals(other.getKey()))) &&
        ((this.value==null && other.getValue()==null) || 
         (this.value!=null &&
          this.value.equals(other.getValue())));
    __equalsCalc = null;
    return _equals;
}

누군가가 나에게 purpoise를 설명해 주시겠습니까? __equalsCalc? 나는 그것을 얻지 못한다. 수업의 다른 곳에서는 사용되지 않습니다. 내가 보는 방식은 "평등"을 계산하는 동안 정확히 늘어지지 않습니다. 그러나 평등은 선언됩니다 synchronized. 따라서 주어진 시간에 하나의 스레드 만있을 수 있습니다. 나는 볼 수 없다, 왜 if (__equalsCalc != null) 사실이어야합니다.

내 바보 같은 오해를 보여주세요 ;-)

편집 : 나는 프로젝트를 처음 접했기 때문에 대답이 잘못 될 수 있습니다. 그러나 올바르게 추적하면 방법은 Axis-WSDL2Java에 의해 생성됩니다.

도움이 되었습니까?

해결책

나는 그것이 재귀를 막으려 고 생각합니다. 무언가가 열쇠로서 무언가가 있다면, 당신은 그것이 영원히 되 찾는 것을 원하지 않습니다.

그러나 그 시점에서 그것은 테스트에 참조 평등을 사용하는데, 이는 바람직하지 않을 수 있습니다.

이 코드를 생성하는 것은 무엇입니까? 집에서 재배 한 시스템입니까, 아니면 공개 시스템입니까? 집에서 자란 경우 개발자가 여전히 회사에 책임이 있습니까?

편집 : 좋아, 이제 우리는 그것이 wsdl2java라는 것을 알았으니, 대답은 소스 코드:

    // The __equalsCalc field and synchronized method are necessary
    // in case the object has direct or indirect references to itself.

그리고:

    // Have we been here before ? return true if yes otherwise false
    pw.println("        if (__equalsCalc != null) {");
    pw.println("            return (__equalsCalc == obj);");
    pw.println("        }");

의견의 가장 설명적인 것은 아니지만 적어도 그들은 우리가 재귀에 대한 올바른 길을 생각하고 있음을 보여줍니다.

다른 팁

__equalscal은 마지막 호출에 대한 캐시로 작동합니다. 따라서 동일한 인스턴스의 동일한 모 메소드에서 두 개의 호출이 동일한 매개 변수로 호출되면 메소드가 더 빠릅니다.

편집 : 죄송합니다

__equalsCalc = null;

거기에 있지 않지만 코드를 다시 확인하면 내 대답이 유효하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top