سؤال

أرى رمز مثل هذا

class A implements Comparable<A> {


}

ماذا يعني هذا، ما هي مزايا وعيوبها؟

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

المحلول

وهذا يعني أن الفئة ملتزمة بالرد على الأساليب المحددة من قبل "واجهه المستخدم" قابلة للمقارنة.

ميزة لديك مع هذا (وأي إعلان "آخر" إعلان) أنه يمكنك "نبذة مختصرة"نوع الكائن ورمز إلى الواجهة بدلا من ذلك.

النظر في هذا

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

ثم قد رمز شيء يمكن استخدامه قابلة للمقارنة بدلا من نوع معين:

public void doSomethingWith( Comparable c ) {

       c.compareTo( other ); // something else...

}

واستدعاءها مثل:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

لأنك لا تهتم حقا ما هو نوع الفصل، فأنت تهتم فقط بتنفيذ الواجهة.

هذا (البرنامج إلى الواجهة بدلا من التنفيذ) هو واحد من أقوى التقنيات في عالم البرمجة OO، لأنه يعزز اقتران منخفض.

نصائح أخرى

تنفيذ واجهة مماثلة يعني أنه يمكن مقارنة A مع مثيلات أخرى من A.

العديد من العمليات في Java التي تنطوي على الفرز استخدم الأساليب المحددة في الواجهة القابلة للمقارنة لتحديد ما إذا كانت مثيلات A أكثر وأقل تكلفة أو تساوي مثيلات أخرى.

من خلال تنفيذ هذه الطرق، يمكنك استخدام الكثير من الميزات المفيدة مثل Java Trans، واستخدام مثيلات A كمفاتيح للأشجار الثنائية، وأكثر من ذلك.

وهذا يعني أن الفئة A يمكن فرزها باستخدام طريقة مقارنة القابلة للمقارنة:

A a1 = new A(1);
A a2 = new A(3);

// -1, 0, or 1 depending on whether a2 is less than, equal to, or greater than a1
int order = a1.compareTo(a2);

يستخدم قابلة للمقارنة النظام الطبيعي لفصولك.

طريقة أخرى للذهاب منذ جافا 5 المقارنة. وبعد يمكنك اجتياز هذا الكائن واحصل على أكثر من طريقة واحدة لمقارنة الفئة المستهدفة وفرزها. على سبيل المثال، في بعض الأحيان قد ترغب في فرز فئة اسم حسب الاسم الأول، أوقات أخرى بواسطة اسم العائلة. مماثلة فقط يمنحك طريقة واحدة للقيام بذلك، ولكن يمكنك الحصول على العديد من الحالات المقارنة.

هذا يعني أن الفصل هو واحد يمكن تشغيله بواسطة الوظائف التي تتوقع أن تكون حججها كائنات يمكن مقارنتها بالكائنات الأخرى من نفس النوع (مثل وظيفة الفرز المحددة مسبقا للقوائم).

تنفيذ الواجهة القابلة للمقارنة يعني أن الطبقة يدعم وظائف معينة تتطلب الواجهة (على وجه التحديد، compareTo() الطريقة)، أن عمليات الفرز (أو غيرها) التي يتم تنفيذها في الفصل ستستفيد من القيام بعملهم دون الاهتمام بقية الفصل.

لمزيد من التفاصيل:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/comparable.html

بالإضافة إلى ما قاله الجميع، عن طريق تنفيذ واجهة (أو تمديد الفصل)، تحصل على تطبيق مترجم لعقد Supertype. في حالة "قابلة للمقارنة"، هذا يعني أنك تحصل على خطأ مترجم إذا فشلت في تطبيق طريقة "INT INTRETO (ANA)" في الفئة المنفذة. إضافة التعليق "overoveroverride" إلى طريقة التنفيذ توفر سلامة زمنية أكبر؛ إذا فشلت في تنفيذ الطريقة باستخدام التوقيع الصحيح، فسيخبرك المحول البرمجي. أخطاء وقت الترجمة كثيرا، أسهل بكثير وأرخص لإصلاح أخطاء وقت التشغيل. علاوة على ذلك، تتيح تنفيذ واجهة أي مثيل لفئة منفذة يتم التعامل معها باعتبارها نوع الواجهة للطرق (والبنسيات) التي تأخذ نوع الواجهة كوسيطة أو معلمة عامة. على سبيل المثال، تأخذ طريقة "java.util.collections.max (Collection Coll)" مجموعة يجب أن تمتد "قابلة للمقارنة".
http://download.oracle.com/javase/7/docs/api/java/util/collections.html#max(java.util.collection)

هذا يعني أن أشياء من هذه الفئة يمكن فرزها بسهولة في مجموعات لأنها يمكن مقارنتها ببعضها البعض. الخيار الآخر هو تطبيق مقارنة وهو فئة مسؤولة عن فرز الطبقات الأخرى. يضع المقارنة منطق الفرز مباشرة في الفصل المراد فرزه؛ المقارنة يضع منطق الفرز في فئة مختلفة.

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