ՀամակարգիչներԾրագրավորում

Java Generics նկարագիր եւ մեթոդները

Սկսած տեսքը Java լեզվի ենթարկվել է մի շարք փոփոխությունների, ինչը, անկասկած, դրական պահեր է իր ֆունկցիոնալ. Մեկը այդ նշանակալից փոփոխությունների ներդրումը Java ջեներիկներ կամ ընդհանրացումների: Այս գործառույթն ոչ միայն կատարել լեզուն ավելի ճկուն եւ բազմակողմանի, այլ նաեւ շատ ավելի ապահով առումով բերելով տվյալների տեսակները:

Փաստն այն է, որ նախքան ներդրման generics ի Java ընդհանուր ինդեքսը կարող է ստեղծվել, ոչ միայն առումով տեսակը հղման օբյեկտ: Նման հղումներ կարող է նշանակվել ցանկացած օբյեկտ: Ի վերջո, դասընթացներ Java անուղղակիորեն օբյեկտը կարգի ժառանգորդներ. Սակայն, այս մոտեցումը պոտենցիալ աղբյուր է բազմաթիվ սխալների հետ կապված անվտանգության տեսակների ակնհայտ փոխակերպման օբյեկտի օբյեկտից նպատակային տեսակի. Երբ, օգտագործելով ընդհանրացումներ բոլոր Casts կատարվում են անվերապահորեն եւ ավտոմատ կերպով, վերացնելով նույնիսկ ներուժ սխալների.

Java Generics: նկարագրությունը եւ օրինակը

Եկեք քննենք մի պարզ օրինակ է կիրառման ընդհանրացման կանոնավոր դասարանների նկարում: Եւ ապա անցնել մի մանրամասն քննության բոլոր subtleties եւ նրբություններին Java ջեներիկներ:

Ուշադրություն դարձնել այն ճանապարհին, որով դասը հայտարարագիրը տեղի է ունենում Pair: Անմիջապես հետո դասի անունով, բաց տեսանկյունից փակագծերում, որը նշված է նամակում Տ Դա մի տեսակ filler, որը գտնվում է ընթացքի մեջ ստեղծելով դեպք այս դասի կփոխարինվեն մի կոնկրետ տեսակի. Այն ունի հետեւյալ տեսքը: զույգ OBJ = նոր զույգ (). Հարկ է նշել, որ փոխարեն T կարող եք ճշտել ցանկացած նամակ, բայց, որպես կանոն, օգտագործել T, V կամ E.

Նկատի ունենալ, որ սկսած ութերորդ տարբերակի Java, նշելով նպատակային տեսակը երբ հռչակելու հղում անկյունաձեւ փակագծեր է կոնստրուկտոր կարող ձախ դատարկ. Այնպես որ, օրինակ, կարող է վերագրվել նաեւ վերը նշված: Զույգ OBJ = նոր զույգ <> ().

Երբ մի խավ, որը հայտարարել է, այնպիսի եղանակով, ապա իր մարմնի փոխարեն կոնկրետ տեսակների ոլորտներում, հղումներ, օբյեկտների կողմից վերադարձվել մեթոդներով դուք կարող եք օգտագործել այդ նամակը: Քանի որ T երբ ստեղծելով դասի օբյեկտ, որը փոխարինվում է որոշակի տեսակի, առաջին եւ երկրորդ դաշտերը այս դեպքում կլինի այդ տիպի Integer:

Հետեւելով տրամաբանությանը փաստարկների եւ firstItem secondItem, անդրադարձել է համապատասխան կոնստրուկտոր պետք է լինի նաեւ տիպի Integer կամ ենթադասի: Եթե դուք փորձեք փոխանցելու տվյալների տեսակը, որը տարբերվում է, թե ինչ էր նշված, երբ ստեղծելով օբյեկտ, Կազմողի թույլ չի տա այդ սխալը: Այսպիսով, փաստարկները կառուցիչը դեպքերում, երբ օբյեկտը կլինի հետեւյալն են: Pair OBJ = նոր զույգ <> (նոր Integer (1), նոր Integer (2)): Նույնը վերաբերում է փաստարկների եւ մեթոդների setFirst setSecond: Եւ քանի որ դու երեւի guessed, մեթոդները getFirst getSecond եւ կվերադառնան մի արժեք տիպի Integer:

Ընդհանրացված մի քանի պարամետրերի դասի տեսակների

Ընդհանրացված դասերի կարող է նաեւ հայտարարի, բազմաթիվ պարամետրերի տեսակի, որոնք սահմանված անկյան փակագծերում ստորակետով. Redesigned է գործի զույգ դասի ներկայացվում է ստորեւ.

Ինչպես դուք կարող եք տեսնել, երբ դուք ստեղծեք մի դեպք այս դասի է անկյան փակագծերում պետք է նշի նույն շարք տեսակներ որպես պարամետրերի. Եթե դուք ծանոթ այս տեսակի տվյալների կառուցվածքի որպես քարտեզի վրա, դուք կարող եք տեսնել, որ այն օգտագործում հենց նույն սկզբունքը: Այնտեղ, առաջին փաստարկը սահմանում է տեսակի բանալին, եւ երկրորդը `այն տեսակի արժեքի. Հարկ է նշել, որ տեսակները փոխանցվել, երբ մի օբյեկտ փաստարկները կարող համընկնումը: Օրինակ, հետեւյալը Հայտարարություն զույգ դասի ատյանի բացարձակապես ճիշտ է: Զույգ OBJ:

Որոշ առանձնահատկություններ ընդհանրացումների

Նախքան գնում հետագա, հարկ է նշել, որ Java Կազմողի չի ստեղծում տարբեր վարկածներ են դասի Զույգ: Ի դեպ, այդ գործընթացում կազմելու ընդհանրացված տեսակ ամբողջ տեղեկատվությունը ջնջվել: Փոխարենը, դուք բերել համապատասխան տեսակները, ստեղծելով հատուկ տարբերակը Pair դասի. Սակայն, ի ծրագրի կա դեռ միայն ընդհանուր տարբերակը դասի: Այս գործընթացը կոչվում է Java ընդհանուր մաքրման տեսակի.

Նկատի ունեցեք, կարեւոր կետ: Հղումներ դեպի տարբեր վարկածներ են նույն java ընդհանուր դասարանում չի կարող մատնանշել է մեկ եւ նույն օբյեկտի. Որ, ենթադրենք ունենք երկու հղումներ Զույգ obj1 եւ զույգ obj2: Հետեւաբար, ըստ obj1 = obj2 ունեցավ սխալ: Չնայած երկու փոփոխականներ են տեսակի Զույգ , օբյեկտները, որոնց դրանք վերաբերում, տարբեր են: Սա վարչապետ օրինակ տեսակների անվտանգության Java ջեներիկներ.

Սահմանափակումներ ջեներիկներ դասերի

Դա կարեւոր է իմանալ, թե որ ընդհանրացումները կարող է կիրառվել միայն տեղեկանք տեսակի, որ պետք է անցնել պարամետրերի ընդհանուր կարգի java փաստարկը պետք է լինի դասը տեսակը: Այս պարզ տեսակները, ինչպիսիք են, օրինակ, կրկնակի կամ երկար, չեն կարող փոխանցվել: Այլ կերպ ասած, հետեւյալ տողը զույգ դասը հռչակագիրը չի թույլատրվում: զույգ OBJ: Սակայն, դա սահմանափակումը չէ լուրջ խնդիր է, քանի որ կա համապատասխան Java փաթաթան դասի համար յուրաքանչյուր պարզունակ տեսակի. Խստորեն ասած, եթե դասը Զույգ ցանկանում եք մարմնացած մի ամբողջ թիվ է եւ բուլյան արժեքը avtoupakovka ամեն ինչ անում է ձեզ համար: Զույգ <Ամբողջ, Բուլյան> OBJ = նոր զույգ <> (25, ճշմարիտ).

Մեկ այլ լուրջ սահմանափակումը անկարողությունը ստեղծել մի դեպք է պարամետր տեսակի. Օրինակ, հետեւյալ տողը կառաջացնի է կազմելու սխալ: T առաջին = նոր T (). Սա ակնհայտ է, քանի որ դուք չգիտեք, թե նախապես, թե արդյոք փաստարկ անցել է ամբողջական դաս կամ վերացական, կամ նույնիսկ ինտերֆեյս. Նույնը վերաբերում է ստեղծելու զանգվածներ:

սահմանափակ տեսակները

Շատ հաճախ լինում են իրավիճակներ, երբ դա անհրաժեշտ է սահմանափակել ցուցակը տեսակների, որոնք կարող են անցել որպես փաստարկ է java ընդհանուր դաս. Եկեք ենթադրենք, որ մեր դասարանում Զույգ, մենք ցանկանում ենք մարմնացած միայն թվային արժեքները հետագա մաթեմատիկական գործողությունների նրանց վրա: Որպեսզի դա անել, մենք պետք է սահմանել վերին սահմանը պարամետր տեսակի. Այն իրականացվում է մի SuperClass գովազդները ժառանգած բոլոր փաստարկները անցել է անկյան փակագծերում: Դա կանդրադառնա նաեւ հետեւյալ կերպ. Դասի զույգ : Այս ձեւով, այն Կազմողի գտնում է, որ փոխանակ այդ պարամետրի T կարող է փոխարինվել կամ Միավորների դասի կամ մեկը իր ենթադասերի:

Սա ընդհանուր ընդունելություն: Նման սահմանափակումները հաճախ օգտագործվում է ապահովել համատեղելիությունը տիպի պարամետրեր մեկ եւ նույն դասարանում: Տեսնենք, մեր դասարանում Զույգ: դասը Զույգ : Այստեղ մենք ասում Կազմողի, որ T տիպը կարող է լինել կամայական, եւ V տեսակը պետք է լինի կամ T տիպը կամ մեկը իր ենթադասերի:

Սահմանափակելու "հատակին" հենց նույն կերպ, բայց բառի փոխարեն տարածվում է հանգեցնել բառը սուպեր: Որը դասակարգվում կարգի զույգ , - ասում է, որ ոչ թե T կարող է փոխարինվել կամ ArrayList, կամ որեւէ դաս կամ ինտերֆեյսի, որ այն ժառանգել:

Ընդհանուր Java մեթոդները եւ շինարարներ

Java, ընդհանրացումներ կարող է կիրառվել ոչ միայն դասերի, այլեւ մեթոդներ. Օրինակ, մի ընդհանուր մեթոդը կարող է հայտարարել է հերթական դասարանում:

Ինչպես երեւում է գործչի վերը, Հայտարարություն ընդհանրացված մեթոդը ոչ մեծ գործարք. Բավական է նախքան վերադարձը տեսակը մեթոդի է դրել անկյունաձեւ փակագծեր եւ նշեք այն տեսակի պարամետրերի նրանց.

Եթե ամեն ինչ արվում է նույն կառուցիչին:

Անկյունաձեւ փակագծերը այս դեպքում դրել անունով դիզայներ, քանի որ նա չունի վերադարձի արժեքը: Արդյունք է երկու ծրագրերի կլինի:

ամբողջ թիվ

String

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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