Tässä opetusohjelmassa opitaan Java Generics -sovelluksesta, miten luodaan geneerinen luokka ja menetelmät sekä sen edut esimerkkien avulla.
Java Genericsin avulla voimme luoda yhden luokan, käyttöliittymän ja menetelmän, jota voidaan käyttää erityyppisten tietojen (objektien) kanssa.
Tämä auttaa meitä käyttämään koodiamme uudelleen.
Huom : Generics ei toimi alkukantaiset tyypit ( int
, float
, char
, jne).
Java Generics -luokka
Voimme luoda luokan, jota voidaan käyttää kaiken tyyppisten tietojen kanssa. Tällainen luokka tunnetaan nimellä Generics Class.
Näin voimme luoda geneerisen luokan Java:
Esimerkki: Luo Generics-luokka
class Main ( public static void main(String() args) ( // initialize generic class // with Integer data GenericsClass intObj = new GenericsClass(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class // with String data GenericsClass stringObj = new GenericsClass("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); ) ) // create a generics class class GenericsClass ( // variable of T type private T data; public GenericsClass(T data) ( this.data = data; ) // method that return T type variable public T getData() ( return this.data; ) )
Tuotos
Yleinen luokka palauttaa: 5 Yleinen luokka palauttaa: Java-ohjelmointi
Yllä olevassa esimerkissä olemme luoneet geneerisen luokan nimeltä GenericsClass. Tätä luokkaa voidaan käyttää kaiken tyyppisten tietojen kanssa.
class GenericsClass (… )
Tässä kulmakannakkeen sisällä käytetty T osoittaa tyypin parametrin .
Main
Luokan sisällä olemme luoneet kaksi GenericsClass-objektia
- intObj - Tässä tyypin parametri T korvataan parametrilla
Integer
. Nyt GenericsClass toimii kokonaislukutietojen kanssa. - stringObj - Tässä tyypin parametri T korvataan parametrilla
String
. Nyt GenericsClass toimii merkkijonodatan kanssa.
Java Generics -menetelmä
Samoin kuin yleisluokassa, voimme myös luoda menetelmän, jota voidaan käyttää minkä tahansa tyyppisen datan kanssa. Tällainen luokka tunnetaan nimellä Generics Method.
Näin voimme luoda geneerisen luokan Java:
Esimerkki: Luo Generics-menetelmä
class Main ( public static void main(String() args) ( // initialize the class with Integer data DemoClass demo = new DemoClass(); // generics method working with String demo.genericsMethod("Java Programming"); // generics method working with integer demo.genericsMethod(25); ) ) class DemoClass ( // creae a generics method public void genericsMethod(T data) ( System.out.println("Generics Method:"); System.out.println("Data Passed: " + data); ) )
Tuotos
Generics Method: Data Passed: Java Programming Generics Method: Data Passed: 25
Yllä olevassa esimerkissä olemme luoneet yleisen menetelmän nimeltä genericsMethod.
public void genericMethod(T data) (… )
Tässä tyypin parametri lisätään muokkaajan jälkeen
public
ja ennen palautustyyppiä void
.
Voimme kutsua geneeristä menetelmää sijoittamalla varsinainen tyyppi ja
suluissa menetelmän nimen eteen.
demo.genericMethod("Java Programming"); demo.genericMethod(25);
Huomaa : Voimme kutsua geneeristä menetelmää sisällyttämättä tyypin parametria. Esimerkiksi,
demo.genericsMethod("Java Programming");
Tässä tapauksessa kääntäjä voi sovittaa tyypin parametrin menetelmän välitetyn arvon perusteella.
Rajoitetut tyypit
Yleensä tyypin parametri voi hyväksyä minkä tahansa tietotyypin (paitsi primitiiviset tyypit).
Jos kuitenkin haluamme käyttää geneerisiä aineita vain tietyille erityistyypeille (kuten hyväksyä numerotyyppien tiedot), voimme käyttää rajoitettuja tyyppejä.
Sidottujen tyyppien tapauksessa käytämme extends
avainsanaa. Esimerkiksi,
Tämä tarkoittaa, että T voi hyväksyä vain tiedot, jotka ovat A: n alatyyppejä.
Esimerkki: Rajoitetut tyypit
class GenericsClass ( public void display() ( System.out.println("This is a bounded type generics class."); ) ) class Main ( public static void main(String() args) ( // create an object of GenericsClass GenericsClass obj = new GenericsClass(); ) )
Yllä olevassa esimerkissä olemme luoneet luokan nimeltä GenericsClass. Huomaa ilmaisu, huomaa ilmaisu
Tässä luodaan GenericsClass rajoitetulla tyypillä. Tämä tarkoittaa GenericsClass pystyy toimimaan vain datatyypit, jotka ovat lapsia Number
( Integer
, Double
ja niin edelleen).
Olemme kuitenkin luoneet objektin geneeristen aineiden kanssa String
. Tässä tapauksessa saamme seuraavan virheen.
GenericsClass obj = uusi GenericsClass (); syy: päättelymuuttujalla T on yhteensopimattomat rajat tasa-arvorajoitukset: Merkkijonon alarajat: Luku, jossa T on tyyppimuuttuja: T laajentaa luokan GenericsClass ilmoitettua määrää
Java Genericsin edut
1. Koodin uudelleenkäytettävyys
Javan geneeristen ominaisuuksien avulla voimme kirjoittaa koodin, joka toimii erityyppisten tietojen kanssa. Esimerkiksi,
public void genericsMethod(T data) (… )
Tässä olemme luoneet geneerisen menetelmän. Samaa menetelmää voidaan käyttää toimintojen suorittamiseen kokonaislukutiedoille, merkkijonotiedoille ja niin edelleen.
2. Käännösajan tyyppitarkistus
Tyyppi parametri geneeristen antaa tietoa datan tyypin käytetään geneerisiä koodi. Esimerkiksi,
// using Generics GenericsClass list = new GenericsClass();
Täällä tiedämme, että GenericsClass toimii vain Integer
tietojen kanssa.
Jos yritämme nyt siirtää muita tietoja kuin kokonaisluku tähän luokkaan, ohjelma tuottaa virheen kääntöhetkellä.
3. Käytetään kokoelmien kanssa
Kokoelmakehyksessä käytetään Java: n geneeristen käsitteitä. Esimerkiksi,
// creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();
Yllä olevassa esimerkissä olemme käyttäneet samaa ArrayList-luokkaa työskennellessä erityyppisten tietojen kanssa.
Samanlainen ArrayList
, muut kokoelmat ( LinkedList
, Queue
, Maps
, ja niin edelleen) ovat myös yleisiä Java.