Java Generics (z przykładami)

W tym samouczku nauczymy się na przykładach generycznych języka Java, jak tworzyć klasy generyczne i metody oraz ich zalety.

Java Generics pozwala nam stworzyć jedną klasę, interfejs i metodę, których można używać z różnymi typami danych (obiektami).

To pomaga nam ponownie wykorzystać nasz kod.

Uwaga : Generics nie działa z prymitywnych typów ( int, float, char, etc).

Klasa generyczna języka Java

Możemy stworzyć klasę, która będzie używana z dowolnym typem danych. Taka klasa jest znana jako klasa generyczna.

Oto jak możemy utworzyć klasę generyczną w Javie:

Przykład: Utwórz klasę generyczną

 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; ) )

Wynik

 Klasa ogólna zwraca: 5 zwraca klas generycznych: Programowanie w języku Java

W powyższym przykładzie utworzyliśmy klasę ogólną o nazwie GenericsClass. Ta klasa może służyć do pracy z dowolnym typem danych.

 class GenericsClass (… )

Tutaj T użyte wewnątrz nawiasu kątowego wskazuje parametr typu . Wewnątrz Mainklasy stworzyliśmy dwa obiekty GenericsClass

  • intObj - tutaj parametr typu T jest zastępowany przez Integer. Teraz GenericsClass działa z danymi całkowitymi.
  • stringObj - tutaj parametr typu T jest zastępowany przez String. Teraz GenericsClass działa z danymi ciągu.

Metoda generyczna języka Java

Podobnie jak w przypadku klasy generics, możemy również utworzyć metodę, której można używać z dowolnym typem danych. Taka klasa jest znana jako metoda generyczna.

Oto jak możemy utworzyć klasę generyczną w Javie:

Przykład: Utwórz metodę generyczną

 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); ) )

Wynik

 Metoda ogólna: przekazano dane: programowanie w języku Java Metoda ogólna: przekazano dane: 25

W powyższym przykładzie utworzyliśmy ogólną metodę o nazwie genericsMethod.

 public void genericMethod(T data) (… )

Tutaj parametr typu jest wstawiany po modyfikatorze publici przed typem zwracanym void.

Możemy wywołać metodę generyczną, umieszczając rzeczywisty typ i wewnątrz nawiasu przed nazwą metody.

 demo.genericMethod("Java Programming"); demo.genericMethod(25);

Uwaga : możemy wywołać metodę generyczną bez dołączania parametru type. Na przykład,

 demo.genericsMethod("Java Programming");

W takim przypadku kompilator może dopasować parametr typu na podstawie wartości przekazanej do metody.

Typy ograniczone

Ogólnie rzecz biorąc, parametr typu może akceptować dowolne typy danych (z wyjątkiem typów pierwotnych).

Jeśli jednak chcemy używać typów ogólnych tylko dla niektórych określonych typów (takich jak akceptowanie danych typów liczbowych), możemy użyć typów ograniczonych.

W przypadku typów powiązanych używamy extendssłowa kluczowego. Na przykład,

 

Oznacza to, że T może akceptować tylko dane, które są podtypami A.

Przykład: typy ograniczone

 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(); ) )

W powyższym przykładzie utworzyliśmy klasę o nazwie GenericsClass. Zwróć uwagę na wyrażenie, zwróć uwagę na wyrażenie

  

Tutaj GenericsClass jest tworzony z typem ograniczonym. Oznacza to GenericsClass może pracować tylko z typów danych, które mają dzieci Number( Integer, Doublei tak dalej).

Jednak utworzyliśmy obiekt klasy generycznej z String. W takim przypadku otrzymamy następujący błąd.

GenericsClass obj = new GenericsClass (); powód: zmienna wnioskowania T ma niezgodne granice ograniczenia równości: Dolne granice łańcucha: Number, gdzie T jest zmienną typu: T rozszerza liczbę zadeklarowaną w klasie GenericsClass

Zalety Java Generics

1. Ponowne wykorzystanie kodu

Z pomocą generycznych w Javie możemy napisać kod, który będzie działał z różnymi typami danych. Na przykład,

 public void genericsMethod(T data) (… )

Tutaj stworzyliśmy metodę generyczną. Tej samej metody można użyć do wykonywania operacji na danych całkowitych, danych w postaci łańcuchów i tak dalej.

2. Sprawdzanie typu w czasie kompilacji

Parametr typ leków generycznych dostarcza informacji o typie danych wykorzystywanych w kodzie generycznych. Na przykład,

 // using Generics GenericsClass list = new GenericsClass();

Tutaj wiemy, że GenericsClass działa Integertylko z danymi.

Teraz, jeśli spróbujemy przekazać dane inne niż Integer do tej klasy, program wygeneruje błąd w czasie kompilacji.

3. Używany z kolekcjami

Struktura kolekcji wykorzystuje koncepcję typów ogólnych w Javie. Na przykład,

 // creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();

W powyższym przykładzie użyliśmy tej samej klasy ArrayList do pracy z różnymi typami danych.

Podobna do ArrayList, inne kolekcje ( LinkedList, Queue, Maps, i tak dalej) są także rodzajowy w Java.

Interesujące artykuły...