کامپیوتربرنامه نویسی

جاوا جنریک: شرح و روش

با شروع به ظاهر از زبان جاوا دستخوش تغییرات زیادی، که بدون شک لحظات مثبت در عملکرد آن به ارمغان آورده است. یکی از این تغییرات قابل توجهی از معرفی جاوا عمومی یا کلی است. این قابلیت نه تنها زبان انعطاف پذیر و همه کاره است، اما همچنین از نظر آوردن انواع داده بسیار امن تر است.

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

جاوا جنریک: توضیحات و مثال

بگذارید مثال ساده از نرم افزار تعمیم به کلاس های عادی که در شکل زیر در نظر بگیرید. و سپس به یک معاینه دقیق از همه پیچیدگی های خاص و تفاوت های ظریف از جاوا عمومی ادامه دهید.

توجه به روشی که در آن اعلان کلاس رخ می دهد جفت. بلافاصله پس از نام کلاس، براکت زاویه باز، که نشان داد این نامه T. این نوع از پرکننده، است که در روند ایجاد یک نمونه از این کلاس خواهد شد توسط یک نوع خاص جایگزین شده است. به نظر می رسد شرح زیر است: جفت <صحیح> OBJ = جدید جفت <صحیح> (). لازم به ذکر است که به جای T می توانید هر حرف مشخص نمایید، اما، به عنوان یک قانون، استفاده از T، V یا E.

توجه: شروع با نسخه هشتم از جاوا، مشخص کردن نوع هدف با اعلام براکت زاویه مرجع در سازنده می توانید خالی رها شود. بنابراین به عنوان مثال می توان به عنوان بالا بازنویسی: جفت <صحیح> OBJ = جدید جفت <> ().

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

بعد از منطق و استدلال firstItem secondItem، با اشاره به سازنده مناسب نیز باید از نوع عدد صحیح یا زیر کلاس است. اگر شما تلاش برای انتقال یک نوع داده است که متفاوت از آنچه مشخص شد که هنگام ایجاد یک شی، کامپایلر این اشتباه را اجازه نمی دهد. بنابراین، سازنده استدلال زمانی که یک شی خواهد شرح زیر است: جفت <صحیح> OBJ = جدید جفت <> (عدد صحیح جدید (1)، عدد صحیح (2)). همین امر به استدلال و روش setFirst setSecond. همانطور که احتمالا حدس زده اید، روش getFirst getSecond و یک مقدار از نوع Integer بازگشت.

تعمیم با انواع کلاس چند پارامتر

در کلاس های عمومی همچنین می توانید پارامترهای متعدد از این نوع است که در براکت زاویه را با کاما مجموعه اعلام کنند. طراحی دوباره توسط یک مورد کلاس جفت در زیر ارائه شده.

همانطور که می بینید، زمانی که شما یک نمونه از این کلاس ایجاد در براکت زاویه باید به همان تعداد از انواع به عنوان پارامتر نشان می دهد. اگر شما با این نوع ساختار داده به عنوان یک نقشه آشنا هستند، شما می توانید ببینید که آن را با استفاده این اصل را دقیقا. نوع ارزش - وجود دارد، اولین آرگومان نوع از کلید، و دوم مشخص می کند. لازم به ذکر است که نوع انتقال زمانی که یک استدلال شی ممکن است با هم تداخل دارند. به عنوان مثال، تبلیغ زیر جفت به عنوان مثال کلاس کاملا درست است: جفت <رشته، رشته> OBJ.

برخی از ویژگی های کلی

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

توجه داشته باشید یک نکته بسیار مهم. لینک به نسخه های مختلف از همان کلاس جنریک جاوا نمی تواند به یک و یک شیء اشاره. است که، فرض کنید ما دو لینک: جفت <صحیح> obj1 و جفت <دو> obj2. در نتیجه، در خط obj1 = obj2 یک خطا. اگر چه هر دو متغیر از نوع جفت هستند، اشیاء که به آن مراجعه کنید، متفاوت است. این یک مثال نخست از انواع امنیتی در جاوا عمومی است.

محدودیت در کلاس های عمومی

این مهم است که بدانید تعمیم می توان تنها اعمال شده به مرجع انواع، است که به تصویب پارامترهای Generic استدلال جاوا کلاس باید یک نوع کلاس باشد. این نوع ساده، مانند، به عنوان مثال، دو و یا طولانی، نمی تواند منتقل شود. به عبارت دیگر، خط زیر را جفت اعلان کلاس مجاز نیست: جفت <نوع int> OBJ. با این حال، این محدودیت است یک مشکل جدی نیست، به عنوان یک کلاس جاوا لفاف بسته بندی مربوطه برای هر نوع اولیه وجود دارد. صرفا سخن گفتن، اگر جفت کلاس شما می خواهید برای کپسوله کردن یک عدد صحیح و بولی ارزش avtoupakovka همه چیز را برای شما انجام می دهد: جفت <عدد صحیح، بولی> OBJ = جدید جفت <> (25، درست است).

یکی دیگر از محدودیت های جدی ناتوانی در ایجاد یک نمونه از نوع پارامتر است. به عنوان مثال، خط زیر را باعث خواهد شد یک خطای کامپایل: T = T برای اولین بار جدید (). این واضح است، چرا که شما در پیشبرد دانم که آیا یک آرگومان یک کلاس کامل و یا چکیده، و یا حتی رابط. همان که برای ایجاد آرایه.

انواع محدود

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

این پذیرش شایع است. چنین محدودیت هایی اغلب مورد استفاده برای ارائه پارامترهای نوع سازگاری در یک و همان کلاس. به عنوان مثال در نظر بگیرید در کلاس جفت ما: کلاس جفت . در اینجا ما به کامپایلر که نوع T را می توان خودسرانه بگویید، و نوع V باید هر دو نوع T و یا یکی از زیر کلاس خود می باشد.

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

روش جاوا عمومی و سازنده

در جاوا، تعمیم می توان نه تنها به طبقات اعمال، بلکه روش. به عنوان مثال، یک روش کلی را می توان در یک کلاس درس به طور منظم اعلام کرد.

همانطور که در شکل بالا دیده می شود، روش تبلیغ تعمیم هیچ معامله بزرگ است. به اندازه کافی قبل از نوع بازگشت از یک روش برای قرار دادن براکت زاویه و پارامترهایی را مشخص نوع در آنها است.

اگر همه چیز به طور مشابه به سازنده انجام می شود:

براکت زاویه در این مورد قبل از نام طراح قرار داده است، چرا که او دارای مقدار بازگشت ندارد. نتیجه هر دو برنامه خواهد بود:

عدد صحیح

رشته

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 fa.delachieve.com. Theme powered by WordPress.