سؤال

هل هناك طريقة في JDK أن يقارن كائنين من أجل المساواة، وهو ما يمثل بلا قيم؟ شيء من هذا القبيل:

public static boolean equals(Object o1, Object o2)
{
    if (o1 == null)
    {
        return o2 == null; // Two nulls are considered equal
    }
    else if (o2 == null)
    {
        return false;
    }

    return o1.equals(o2);
}

ويبدو سخيفة لكتابة هذا الأسلوب نفسي منذ أعتقد أن لها وجود بالفعل في مكان ما.

هل كانت مفيدة؟

المحلول

وجافا 7.0 أضاف فئة يدوية جديدة: Objects

ولديه طريقة بالضبط لذلك: <لأ href = "http://docs.oracle.com/javase/8/docs/api/java/util/Objects.html#equals-java.lang.Object- java.lang.Object - "> Objects.equals(Object a, Object b)

نصائح أخرى

وأباتشي العموم لانغ لديه مثل هذه الطريقة: <لأ href = "http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ObjectUtils.html#equals(java. lang.Object،٪ 20java.lang.Object) "يختلط =" نوفولو noreferrer "> ObjectUtils.equals (object1، object2) . كنت لا تريد الأدوية على مثل هذا الأسلوب، فإنه سوف يؤدي إلى أخطاء ترجمة وهمية، على الأقل في الاستخدام العام. يساوي يعرف جيدا (أو ينبغي - بل هو جزء من العقد). للتحقق من فئة الكائن وعودة كاذبة، لذلك لا تحتاج إلى أي نوع سلامة إضافية

وFWIW، كان هذا التنفيذ بلدي:

private static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}

في طلبي، وأنا أعلم أن أ و ب وسوف يكون دائما نفس النوع، ولكن أظن أن هذا يعمل بشكل جيد حتى لو لم تكن كذلك، شريطة أن a.equals () ينفذ بشكل معقول.

public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}

إذا كنت قلقا حول NullPointerExceptions هل يمكن أن مجرد اختبار المساواة مثل:

if (obj1 != null && obj1.equals(obj2)) { ... }

والعقد العام للequals() هو أن كائن غير الصفرية لا ينبغي أبدا أن يكون مساويا لإشارة لاغية، وأن طريقة equals() يجب أن تعود كاذبة اذا كنت مقارنة كائن إلى مرجع فارغة (وليس رمي NPE).

وكلما جئت عبر حاجة والتفكير "وهذا أمر شائع جدا يجب أن يكون جافا ذلك" ولكن تجد أنه لا، I تحقق المشروع جاكرتا العموم. لديها دائما تقريبا. ويظهر البحث السريع للAPI العموم لانغ (التي لديها أبسط المرافق المشتركة) و<لأ href = "http://commons.apache.org/lang/api/org/apache/commons/lang/ObjectUtils. أتش تي أم أل # يساوي٪ 28java.lang.Object،٪ 20java.lang.Object٪ 29 "يختلط =" نوفولو noreferrer "> equals() طريقة التي توفر ما تريد.

API جاكرتا العموم لانج لديه ما كنت تبحث عن <لأ href = "HTTP: // commons.apache.org/lang/api-release/org/apache/commons/lang/ObjectUtils.html#equals٪28java.lang.Object،٪20java.lang.Object٪29 "يختلط =" نوفولو noreferrer "> ObjectUtils. يساوي (وجوه، وجوه)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top