logo

Generics Javassa

The Java Generics ohjelmointi on otettu käyttöön J2SE 5:ssä käsittelemään tyyppiturvallisia objekteja. Se tekee koodista vakaan havaitsemalla virheet käännösaikana.

merkkijonon muunnos int:ksi javassa

Ennen yleisiä, voimme tallentaa minkä tahansa tyyppisiä objekteja kokoelmaan, eli ei-yleisiä. Nyt yleiset pakottavat java-ohjelmoijan tallentamaan tietyntyyppisiä objekteja.

Java Genericsin etu

Geneerisillä on pääasiassa kolme etua. Ne ovat seuraavat:

1) Tyyppiturvallisuus: Voimme sisältää vain yhden tyyppisiä objekteja geneerissä. Se ei salli muiden esineiden tallentamista.

Ilman Genericsiä voimme tallentaa minkä tahansa tyyppisiä esineitä.

 List list = new ArrayList(); list.add(10); list.add('10'); With Generics, it is required to specify the type of object we need to store. List list = new ArrayList(); list.add(10); list.add('10');// compile-time error 

2) Tyyppivalua ei vaadita: Objektia ei tarvitse kirjoittaa koneella.

Ennen Genericsiä meidän on kirjoitettava cast.

 List list = new ArrayList(); list.add('hello'); String s = (String) list.get(0);//typecasting After Generics, we don't need to typecast the object. List list = new ArrayList(); list.add('hello'); String s = list.get(0); 

3) Käännösajan tarkistus: Se tarkistetaan käännösaikana, joten ongelmaa ei ilmene ajon aikana. Hyvä ohjelmointistrategia sanoo, että on paljon parempi käsitellä ongelma käännösaikana kuin ajon aikana.

 List list = new ArrayList(); list.add('hello'); list.add(32);//Compile Time Error 

Syntaksi käyttää yleistä kokoelmaa

 ClassOrInterface 

Esimerkki käyttää Generics-ohjelmaa javassa

 ArrayList 

Täydellinen esimerkki yleisistä Java-ohjelmista

Tässä käytämme ArrayList-luokkaa, mutta voit käyttää mitä tahansa kokoelmaluokkaa, kuten ArrayList, LinkedList, HashSet, TreeSet, HashMap, Comparator jne.

sanan rivitys css
 import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

 import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 
Testaa nyt

Lähtö:

 element is: jai rahul jai 

Esimerkki Java Genericistä käyttämällä karttaa

Nyt aiomme käyttää karttaelementtejä käyttämällä geneerejä. Tässä meidän on välitettävä avain ja arvo. Ymmärrämme sen yksinkertaisella esimerkillä:

 import java.util.*; class TestGenerics2{ public static void main(String args[]){ Map map=new HashMap(); map.put(1,&apos;vijay&apos;); map.put(4,&apos;umesh&apos;); map.put(2,&apos;ankit&apos;); //Now use Map.Entry for Set and Iterator Set<map.entry> set=map.entrySet(); Iterator<map.entry> itr=set.iterator(); while(itr.hasNext()){ Map.Entry e=itr.next();//no need to typecast System.out.println(e.getKey()+&apos; &apos;+e.getValue()); } }} </map.entry></map.entry>
Testaa nyt

Lähtö

 1 vijay 2 ankit 4 umesh 

Yleinen luokka

Luokka, joka voi viitata mihin tahansa tyyppiin, tunnetaan yleisenä luokkana. Tässä käytämme T-tyypin parametria tietyn tyypin yleisen luokan luomiseen.

Katsotaanpa yksinkertainen esimerkki yleisen luokan luomisesta ja käyttämisestä.

Yleisen luokan luominen:

 class MyGen{ T obj; void add(T obj){this.obj=obj;} T get(){return obj;} } 

T-tyyppi osoittaa, että se voi viitata mihin tahansa tyyppiin (kuten merkkijono, kokonaisluku ja työntekijä). Luokkalle määrittämääsi tyyppiä käytetään tietojen tallentamiseen ja hakemiseen.

Yleisluokan käyttö:

Katsotaanpa koodia yleisen luokan käyttämiseksi.

 class TestGenerics3{ public static void main(String args[]){ MyGen m=new MyGen(); m.add(2); //m.add(&apos;vivek&apos;);//Compile time error System.out.println(m.get()); }} 
Testaa nyt

Lähtö

 2 

Tyyppi Parametrit

Tyyppiparametrien nimeämiskäytännöt ovat tärkeitä yleisten perusteiden oppimiseksi. Yleiset tyyppiparametrit ovat seuraavat:

100 km/h - mph
  1. T - tyyppi
  2. E - Elementti
  3. K - Avain
  4. N - Numero
  5. V - Arvo

Yleinen menetelmä

Kuten yleinen luokka, voimme luoda yleisen menetelmän, joka hyväksyy kaiken tyyppiset argumentit. Tässä argumenttien laajuus rajoittuu menetelmään, jossa se on ilmoitettu. Se mahdollistaa staattiset ja ei-staattiset menetelmät.

Katsotaanpa yksinkertainen esimerkki javan yleisestä menetelmästä taulukkoelementtien tulostamiseen. Käytämme täällä JA elementin merkitsemiseksi.

 public class TestGenerics4{ public static void printArray(E[] elements) { for ( E element : elements){ System.out.println(element ); } System.out.println(); } public static void main( String args[] ) { Integer[] intArray = { 10, 20, 30, 40, 50 }; Character[] charArray = { &apos;J&apos;, &apos;A&apos;, &apos;V&apos;, &apos;A&apos;, &apos;T&apos;,&apos;P&apos;,&apos;O&apos;,&apos;I&apos;,&apos;N&apos;,&apos;T&apos; }; System.out.println( &apos;Printing Integer Array&apos; ); printArray( intArray ); System.out.println( &apos;Printing Character Array&apos; ); printArray( charArray ); } } 
Testaa nyt

Lähtö

 Printing Integer Array 10 20 30 40 50 Printing Character Array J A V A T P O I N T 

Jokerimerkki Java Genericsissä

? (kysymysmerkki) symboli edustaa yleismerkkielementtiä. Se tarkoittaa mitä tahansa tyyppiä. Jos kirjoitamme , se tarkoittaa mitä tahansa Numeron aliluokkaa, esim. Kokonaisluku, Float ja Double. Nyt voimme kutsua Numeroluokan metodia minkä tahansa aliluokkaobjektin kautta.

Voimme käyttää yleismerkkiä a parametrin, kentän, palautustyypin tai paikallisen muuttujan tyyppi. Jokerimerkkiä ei kuitenkaan saa käyttää tyyppiargumenttina yleiselle menetelmän kutsulle, yleiselle luokkailmentymän luomiselle tai supertyypille. .

Ymmärretään se alla olevan esimerkin avulla:

 import java.util.*; abstract class Shape{ abstract void draw(); } class Rectangle extends Shape{ void draw(){System.out.println(&apos;drawing rectangle&apos;);} } class Circle extends Shape{ void draw(){System.out.println(&apos;drawing circle&apos;);} } class GenericTest{ //creating a method that accepts only child class of Shape public static void drawShapes(List lists){ for(Shape s:lists){ s.draw();//calling method of Shape class by child class instance } } public static void main(String args[]){ List list1=new ArrayList(); list1.add(new Rectangle()); List list2=new ArrayList(); list2.add(new Circle()); list2.add(new Circle()); drawShapes(list1); drawShapes(list2); }} 

Lähtö

 drawing rectangle drawing circle drawing circle 

Ylärajalliset jokerimerkit

Ylempien jokerimerkkien tarkoitus on vähentää muuttujan rajoituksia. Se rajoittaa tuntemattoman tyypin olevan tietty tyyppi tai sen alatyyppi. Sitä käytetään ilmoittamalla jokerimerkki ('?'), jota seuraa extens-avainsana (jos tapauksessa, luokka) tai toteuttaa (jos tapauksessa, käyttöliittymä) -avainsana, jota seuraa sen yläraja.

Syntaksi

 List 

Tässä,

? on jokerimerkki.

ulottuu , on avainsana.

Määrä , on java.lang-paketissa oleva luokka

Oletetaan, että haluamme kirjoittaa menetelmän Number-luettelolle ja sen alatyypeille (kuten Integer, Double). Käyttämällä Lista sopii luettelolle tyypistä Number tai mille tahansa sen alaluokista, kun taas Lista toimii vain numerotyypin luettelon kanssa. Niin, Lista on vähemmän rajoittava kuin Lista .

Esimerkki ylärajan jokerimerkistä

Tässä esimerkissä käytämme ylärajaisia ​​jokerimerkkejä kirjoittaaksesi menetelmän listalle ja luettelolle.

 import java.util.ArrayList; public class UpperBoundWildcard { private static Double add(ArrayList num) { double sum=0.0; for(Number n:num) { sum = sum+n.doubleValue(); } return sum; } public static void main(String[] args) { ArrayList l1=new ArrayList(); l1.add(10); l1.add(20); System.out.println(&apos;displaying the sum= &apos;+add(l1)); ArrayList l2=new ArrayList(); l2.add(30.0); l2.add(40.0); System.out.println(&apos;displaying the sum= &apos;+add(l2)); } } 
Testaa nyt

Lähtö

dhl merkitys
 displaying the sum= 30.0 displaying the sum= 70.0 

Rajoittamattomat jokerimerkit

Rajoittamaton jokerimerkkityyppi edustaa tuntemattoman tyypin luetteloa, kuten List. Tämä lähestymistapa voi olla hyödyllinen seuraavissa skenaarioissa: -

  • Kun annettu menetelmä on toteutettu Object-luokassa tarjotuilla toiminnoilla.
  • Kun yleinen luokka sisältää menetelmiä, jotka eivät riipu tyyppiparametrista.

Esimerkki rajoittamattomista jokerimerkeistä

 import java.util.Arrays; import java.util.List; public class UnboundedWildcard { public static void display(List list) { for(Object o:list) { System.out.println(o); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println(&apos;displaying the Integer values&apos;); display(l1); List l2=Arrays.asList(&apos;One&apos;,&apos;Two&apos;,&apos;Three&apos;); System.out.println(&apos;displaying the String values&apos;); display(l2); } } 
Testaa nyt

Lähtö

 displaying the Integer values 1 2 3 displaying the String values One Two Three 

Alarajalliset jokerimerkit

Alempien jokerimerkkien tarkoitus on rajoittaa tuntematon tyyppi tietyksi tyypiksi tai tämän tyypin supertyypiksi. Sitä käytetään ilmoittamalla jokerimerkki ('?'), jota seuraa super-avainsana ja sen alaraja.

Syntaksi

 List 

Tässä,

? on jokerimerkki.

super , on avainsana.

Kokonaisluku , on kääreluokka.

Näyttelijä Rekha

Oletetaan, että haluamme kirjoittaa menetelmän kokonaislukujen ja sen supertyypin listalle (kuten numero, objekti). Käyttämällä Lista sopii Integer-tyypin luettelolle tai mille tahansa sen superluokista, kun taas Lista toimii vain Integer-tyypin luettelon kanssa. Niin, Lista on vähemmän rajoittava kuin Lista .

Esimerkki alarajaisesta jokerimerkistä

Tässä esimerkissä käytämme alarajaisia ​​jokerimerkkejä kirjoittamaan menetelmät listalle ja luettelolle.

 import java.util.Arrays; import java.util.List; public class LowerBoundWildcard { public static void addNumbers(List list) { for(Object n:list) { System.out.println(n); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println(&apos;displaying the Integer values&apos;); addNumbers(l1); List l2=Arrays.asList(1.0,2.0,3.0); System.out.println(&apos;displaying the Number values&apos;); addNumbers(l2); } } 
Testaa nyt

Lähtö

 displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0