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,'vijay'); map.put(4,'umesh'); map.put(2,'ankit'); //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()+' '+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('vivek');//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
- T - tyyppi
- E - Elementti
- K - Avain
- N - Numero
- 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 = { 'J', 'A', 'V', 'A', 'T','P','O','I','N','T' }; System.out.println( 'Printing Integer Array' ); printArray( intArray ); System.out.println( 'Printing Character Array' ); 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('drawing rectangle');} } class Circle extends Shape{ void draw(){System.out.println('drawing circle');} } 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('displaying the sum= '+add(l1)); ArrayList l2=new ArrayList(); l2.add(30.0); l2.add(40.0); System.out.println('displaying the sum= '+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('displaying the Integer values'); display(l1); List l2=Arrays.asList('One','Two','Three'); System.out.println('displaying the String values'); 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('displaying the Integer values'); addNumbers(l1); List l2=Arrays.asList(1.0,2.0,3.0); System.out.println('displaying the Number values'); addNumbers(l2); } }Testaa nyt
Lähtö
displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0