Java Generics Tutorial - He aha nga Generics me Pehea te whakamahi ia ratau?

Java Generics tetahi o nga mea nui o te reo Java. He maamaa noa te whakaaro ki muri o nga tikanga whanui, engari, he uaua i etahi wa na te mea kua neke ke mai i te wetereo tikanga e hono ana.

Ko te kaupapa o tenei akoranga he whakamohio i a koe ki tenei kaupapa whaihua o te whakatipuranga i roto i te tikanga ngawari ki te maarama.

Engari i mua i te ruku ki nga mea whakatipuranga ano, tirohia te take i hiahiatia tuatahihia ai nga momo Java.




Tuhinga o mua

I mua i te whakaurutanga o nga mea whanui i Java 5, ka taea e koe te tuhi me te whakahiato i tetahi waahanga waehere penei me te kore e hapa he whakatupato ranei:

List list = new ArrayList(); list.add('hey'); list.add(new Object());

Ka taea e koe te whakauru i nga uara o tetahi momo ki tetahi raarangi, ki tetahi atu Kohinga Java ranei, me te kore e whakaatu he aha nga momo raraunga e penapena ana. Engari ka tango koe i nga uara mai i te raarangi, me tino aata maka e koe ki tetahi momo.


Whakaarohia kia taarua ma te raarangi i runga ake nei.

for (int i=0; i< list.size(); i++) {
String value = (String) list.get(i); //CastClassException when i=1 }

Ma te whakaae ki te hanga raarangi kaore i te korerohia te momo raraunga penapena, penei i ta maatau, ka hapa pea nga kaihuri rorohiko penei i runga ake nei ka whiua ClassCastExceptions i roto i te wā ururua.

I whakauruhia nga Generics kia aukati i nga kaihuri i te mahi he.

Ma nga tohunga whanui, ka taea e koe te whakaatu marama i nga momo raraunga ka penapenahia i te wa e hanga ana i tetahi Kohinga Java e whakaatu mai ana i nga tauira e whai ake nei.


Panui:Ka taea tonu e koe te hanga ahanoa kohinga Java me te kore e tohu i te momo raraunga penapena engari kaore e taunaki. List stringList = new ArrayList();

Na, kaore e taea te pohehe te penapena i te Tau Waea ki roto i te raarangi momo Ahu me te kore e raru i te hapa wa-whakahiato. Ma tenei e kore ai to papatono e hapa i nga waahi.

stringList.add(new Integer(4)); //Compile time Error

Ko te kaupapa matua o te whakaurutanga o nga mahi whanui ki Java kia kore e rere ki ClassCastExceptions i te wā ururua.



Te Waihanga i nga Generics Java

Ka taea e koe te whakamahi i nga taapiri hei hanga i nga karaehe me nga tikanga Java. Tirohia nga tauira mo te hanga waihanga o ia momo.

Akomanga Whakanui

I te wa e hanga ana i tetahi akomanga akomanga, ko te taatari momo mo te akomanga ka taapirihia ki te mutunga o te ingoa o te akomanga kei roto i te koki awhi.


public class GenericClass {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return this.item;
} }

Anei, T Ko te taatai ​​momo raraunga. T, N, me E ko etahi o nga reta e whakamahia ana mo nga momo momo taatai ​​e ai ki nga tikanga a Java.

I roto i te tauira i runga ake nei, ka taea e koe te tuku i tetahi momo raraunga motuhake ka hanga ana i tetahi ahanoa GenericClass.

public static void main(String[] args) {
GenericClass gc1 = new GenericClass();
gc1.setItem('hello');
String item1 = gc1.getItem(); // 'hello'
gc1.setItem(new Object()); //Error
GenericClass gc2 = new GenericClass();
gc2.setItem(new Integer(1));
Integer item2 = gc2.getItem(); // 1
gc2.setItem('hello'); //Error }

Kaore e taea e koe te tuku i tetahi momo raraunga tawhito ki te taatai ​​momo raraunga i te wa e hanga ana koe i tetahi mea akomanga akomanga. Ko nga momo raraunga anake e toro ana i te momo Ahanoa ka taea te tuku hei momo taatari.

Hei tauira:


GenericClass gc3 = new GenericClass(); //Error

Tikanga Whanui

Ko te hanga tikanga taapiri e whai ana i tetahi tauira rite ki te hanga akomanga panui. Ka taea e koe te whakamahi i tetahi tikanga whanui i roto i te akomanga whakatipuranga tae atu ki te kore-whanui.

public class GenericMethodClass {
public static void printItems(T[] arr){
for (int i=0; i< arr.length; i++) {

System.out.println(arr[i]);
}
}
public static void main(String[] args) {
String[] arr1 = {'Cat', 'Dog', 'Mouse'};
Integer[] arr2 = {1, 2, 3};

GenericMethodClass.printItems(arr1); // 'Cat', 'Dog', 'Mouse'
GenericMethodClass.printItems(arr2); // 1, 2, 3
} }

I konei, ka taea e koe te paahi i tetahi momo momo hei whakatauira i te tikanga. Te tikanga whanui PrintItems() ka huri i nga waahanga kua paahitia ka taia nga taonga kua penapena kia rite ki te tikanga Java noa.



Nga Momo Momo Paetehia

I tenei wa, ko nga karaehe whanui me nga tikanga i hangaia e matou i runga ake nei, ka taea te whakariterite ki tetahi momo raraunga atu i nga momo tawhito. Engari mena ka hiahia taatau ki te aukati i nga momo raraunga ka taea te tuku ki nga tohunga whanui? Koinei te waahi ka uru mai nga momo taapiri.

Ka taea e koe te here i nga momo raraunga e whakaaehia ana e tetahi akomanga noa, tetahi tikanga ranei ma te tohu me waiho hei wehenga iti o tetahi atu momo raraunga.


Hei tauira:

//accepts only subclasses of List public class UpperBoundedClass{
//accepts only subclasses of List
public void UpperBoundedMethod(T[] arr) {
} }

Anei, te UpperBoundedClass me UpperBoundedMethod ka taea noa te taatari ma te whakamahi i nga taapiri o te List momo raraunga.

List mahi momo raraunga rite te rohe o runga ake ki te tawhā momo. Mena ka ngana koe ki te whakamahi i tetahi momo raraunga ehara i te momo taarua o List, ka hapa te waahi-whakahiato.

Ko nga rohe kaore e herea ki nga akomanga anake. Ka taea hoki e koe te whakawhiti atanga. Ko te whakawhānui i te atanga te tikanga, i tenei keehi, te whakamahi i te atanga.

Ka taea hoki e te paearu te whai i nga rohe maha penei i tenei tauira whakaaturanga.

//accepts only subclasses of both Mammal and Animal public class MultipleBoundedClass{
//accepts only subclasses of both Mammal and Animal
public void MultipleBoundedMethod(T[] arr){
} }

Ko te momo raraunga whakaae me waiho he wehenga o nga akomanga Kararehe me te Mamomo. Mena he akomanga tetahi o enei rohe, me matua tae mai ki te korero tuatahi.

I roto i te tauira o runga ake nei, mena he akomanga a Mamara, a, he mahinga te Kararehe, me matua tuatahi a Mamara penei i runga ake nei. Ki te kore, ka whiua e te waehere he hapa wa-whakahiato.



Java Generics Kararehe Kararehe

Ka whakamahia nga Kaariakaro hei whakawhiti i nga waahanga o nga momo tikanga ki nga tikanga. Kaore i rite, he tikanga whanui, i konei, ka tukuna te taapara whanui ki nga taapiri e whakaaehia ana e te tikanga, he rereke i nga momo taatai ​​korero i korerohia i runga ake nei. Ko te kaari miiharo e tohuhia ana e te? tohu.

public void printItems(List list) {
for (int i=0; i< list.size(); i++) {
System.out.println(list.get(i));
} }

I runga ake nei printItems() tikanga whakaae te rārangi o tetahi momo raraunga rite te tawhā. Ka aukati tenei i nga kaiwhakahauhau kia kore e whakahou i nga waehere mo nga raarangi o nga momo raraunga rereke, ka peera mena kaore he kaikoi.

Nga Kaariariki Taapapaku o runga

Mena e hiahia ana maatau ki te whakaiti i nga momo raraunga kua penapena ki te raarangi e whakaaehia ana e te tikanga, ka taea e maatau te whakamahi i nga kaata kaari hereherea.

Tauira:

public void printSubTypes(List list) {
for (int i=0; i< list.size(); i++) {
System.out.println(list.get(i));
} }

printSubTypes() ka whakaae te tikanga ki nga raarangi e penapena ana i nga momo taarua o te Tae. Ka whakaae ki te raarangi o nga taonga RedColor, BlueColor ranei, engari kaore e whakaae ki te raarangi o nga kararehe kararehe. Na te mea ehara te Kararehe i te momo taarua o te Tae. He tauira tenei mo te kaariariki-a-rohe.

Nga Kaariariki Taaro Raro

Waihoki, mena i:

public void printSuperTypes(List list) {
for (int i=0; i< list.size(); i++) {
System.out.println(list.get(i));
} }

na, ko te printSuperTypes() te tikanga ka whakaae noa ki nga raarangi e penapena ana i nga momo tino pai o te karaehe Kuri. Ka whakaaetia e ia te raarangi o nga taonga Mamomo, o nga Kararehe ranei engari kaore i te raarangi o nga taonga LabDog na te mea ehara te LabDog i te toparaa kuri, engari he wehenga iti. He tauira tenei mo te kaari kaari o raro.



Whakamutunga

Java Generics kua waiho hei waahanga kaore e taea e nga kaiwhakaari te noho i waho o tana whakauru.

Ko tenei rongonui na tona paanga ki te maama kia ngawari ake te oranga o nga Kaihono. Atu i te aukati i a ratau ki te hapa hapa waehere, na te whakamahi i nga tikanga whaanui ka iti ake te taarua o te waehere. I kite koe me pehea te whakarahi i nga karaehe me nga tikanga kia kore ai e tuaruatia te waehere mo nga momo momo raraunga?

Kia mau ki te aata mohio ki nga tikanga whaanui he mea nui kia tohunga ki te reo. Na, ko te whakamahi i nga mea i akohia e koe i tenei akoranga ma te waehere whaihua te huarahi ki te anga whakamua inaianei.