سؤال

جميع لدت خدمة ويب-بذرة من الواجهة الخلفية لدينا على قدم المساواة-طريقة مشابهة لهذه واحدة:

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) ينبغي أن يكون من أي وقت مضى صحيح.

يرجى تظهر لي سوء فهم أغبياء؛ -)

وتحرير: أنا جديدة على المشروع، وبالتالي جوابي قد تكون خاطئة. ولكن اذا كنت تتبع بشكل صحيح، يتم إنشاء الطريقة التي محاور 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