برنامه نویسی

رابط قابل مقایسه – انجمن DEV

این قابل مقایسه اینترفیس متد compareTo را برای مقایسه اشیا تعریف می کند. فرض کنید می خواهید یک روش عمومی برای پیدا کردن بزرگتر از دو شی از یک نوع طراحی کنید، مانند دو دانش آموز، دو تاریخ، دو دایره، دو مستطیل یا دو مربع. برای انجام این کار، دو شی باید با هم قابل مقایسه باشند، بنابراین رفتار مشترک برای اشیاء است
باید قابل مقایسه باشد جاوا فراهم می کند قابل مقایسه رابط برای این منظور. رابط به صورت زیر تعریف شده است:

// Interface for comparing objects, defined in java.lang
package java.lang;
public interface Comparable {
public int compareTo(E o);
}

این در مقایسه با متد ترتیب این شی را با شی مشخص شده تعیین می کند o و یک عدد صحیح منفی، صفر یا یک عدد صحیح مثبت را برمی گرداند اگر این شی کوچکتر، مساوی یا بزرگتر از o.

این قابل مقایسه رابط یک رابط عمومی است. نوع عمومی E در هنگام اجرای این رابط با یک نوع بتنی جایگزین می شود. بسیاری از کلاس ها در کتابخانه جاوا پیاده سازی می شوند قابل مقایسه برای تعریف نظم طبیعی برای اشیاء. کلاس ها بایت، کوتاه، عدد صحیح، طولانی، شناور، دو برابر، شخصیت، BigInteger، BigDecimal، تقویم، رشته، و تاریخ همه اجرا می کنند قابل مقایسه رابط. به عنوان مثال عدد صحیح، BigInteger، رشته، و تاریخ کلاس ها در Java API به صورت زیر تعریف می شوند:

توضیحات تصویر

بنابراین، اعداد قابل مقایسه هستند، رشته ها قابل مقایسه هستند، و همچنین تاریخ ها. می توانید استفاده کنید در مقایسه با روشی برای مقایسه دو عدد، دو رشته و دو تاریخ. برای مثال کد زیر

1 System.out.println(new Integer(3).compareTo(new Integer(5)));
2 System.out.println("ABC".compareTo("ABE"));
3 java.util.Date date1 = new java.util.Date(2013, 1, 1);
4 java.util.Date date2 = new java.util.Date(2012, 1, 1);
5 System.out.println(date1.compareTo(date2));

نمایش می دهد

-1
-2
1

خط 1 یک مقدار منفی را نشان می دهد 3 کمتر است از 5. خط 2 یک مقدار منفی را نشان می دهد ABC کمتر است از ABE. خط 5 یک مقدار مثبت را نشان می دهد تاریخ 1 بزرگتر است از تاریخ 2.

اجازه دهید n لوبیا عدد صحیح هدف – شی، س یک باشد رشته شیء، و د یک باشد تاریخ هدف – شی. تمام عبارات زیر هستند درست است، واقعی.

توضیحات تصویر

از آنجایی که همه قابل مقایسه اشیاء دارای در مقایسه با روش، java.util.Arrays.sort(Object[]) روش در API جاوا از در مقایسه با روشی برای مقایسه و مرتب‌سازی اشیاء در یک آرایه، مشروط بر اینکه اشیاء نمونه‌هایی از آرایه باشند قابل مقایسه رابط. برنامه زیر نمونه ای از مرتب سازی آرایه ای از رشته ها و آرایه ای از را نشان می دهد BigInteger اشیاء.

توضیحات تصویر

برنامه آرایه ای از رشته ها را ایجاد می کند (خط 7) و آن را فراخوانی می کند مرتب سازی روش مرتب سازی رشته ها (خط 8). برنامه آرایه ای از BigInteger اشیاء (خط 13) و فراخوانی می کند مرتب سازی روش مرتب سازی BigInteger اشیاء (خط 14).

شما نمی توانید استفاده کنید مرتب سازی روش مرتب سازی آرایه از مستطیل اشیاء، زیرا مستطیل اجرا نمی کند قابل مقایسه. با این حال، شما می توانید یک کلاس مستطیل جدید تعریف کنید که پیاده سازی می کند قابل مقایسه. نمونه های این کلاس جدید قابل مقایسه هستند. بگذارید این کلاس جدید نامگذاری شود مستطیل قابل مقایسه، همانطور که در برنامه زیر نشان داده شده است.

توضیحات تصویر

مستطیل قابل مقایسه گسترش می یابد مستطیل و اجرا می کند قابل مقایسه، همانطور که در شکل زیر نشان داده شده است. کلمه کلیدی اجرا می کند نشان میدهد که مستطیل قابل مقایسه تمام ثابت ها را از the به ارث می برد قابل مقایسه رابط و روش ها را در واسط پیاده سازی می کند. این در مقایسه با این روش مساحت دو مستطیل را با هم مقایسه می کند. یک نمونه از مستطیل قابل مقایسه نیز نمونه ای از مستطیل، شیء هندسی، هدف – شی، و قابل مقایسه.

توضیحات تصویر

اکنون می توانید از مرتب سازی روش مرتب سازی آرایه از مستطیل قابل مقایسه اشیاء، مانند برنامه زیر.

توضیحات تصویر

Width: 3.4 Height: 5.4 Area: 18.36
Width: 1.4 Height: 25.4 Area: 35.559999999999995
Width: 7.4 Height: 35.4 Area: 261.96
Width: 13.24 Height: 55.4 Area: 733.496

یک رابط شکل دیگری از برنامه نویسی عمومی را ارائه می دهد. استفاده از روش مرتب سازی عمومی برای آن دشوار خواهد بود مرتب سازی اشیاء بدون استفاده از رابط در این مثال، زیرا ارث بردن چندگانه برای ارث بردن ضروری است قابل مقایسه و کلاس دیگری مانند مستطیل، همزمان.

این هدف – شی کلاس شامل برابر است روش، که برای زیر کلاس های در نظر گرفته شده است هدف – شی برای مقایسه اینکه آیا محتویات اشیاء یکسان هستند یا خیر، کلاس را لغو کنید. فرض کنید که هدف – شی کلاس شامل در مقایسه با روش، همانطور که در تعریف شده است قابل مقایسه رابط؛ را مرتب سازی روش را می توان برای مقایسه لیستی از هر اشیاء. اینکه آیا یک در مقایسه با روش باید در آن گنجانده شود هدف – شی کلاس قابل بحث است از آنجا که در مقایسه با روش در تعریف نشده است هدف – شی کلاس، قابل مقایسه اینترفیس در جاوا تعریف شده است تا اشیا را در صورتی که نمونه هایی از آن هستند، مقایسه کنند قابل مقایسه رابط. اکیداً توصیه می شود (البته لازم نیست) که در مقایسه با باید سازگار باشد برابر است. یعنی برای دو شی o1 و o2، o1.compareTo(o2) == 0 اگر و تنها اگر o1.برابر (o2) است درست است، واقعی.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا