Generik di Jawa dan Implementasinya

Generik di Jawa

Dalam pemrograman Java, generik bahasa diluncurkan di J2SE 5 untuk mengatasi objek yang aman tipe. Ini mendeteksi bug pada waktu kompilasi dimana kode dibuat stabil. Jenis objek apa pun diizinkan untuk disimpan dalam koleksi sebelum pengenalan umum. Sekarang daftar tiktok88 setelah pengenalan umum dalam bahasa pemrograman Java , pemrogram dipaksa untuk menyimpan jenis objek eksplisit.

Manfaat Java Generik

Tiga manfaat mendasar dari penggunaan obat generik diberikan di bawah ini:

1. Sortir-Keamanan

Generik memungkinkan pengecer hanya dari satu jenis objek. Selanjutnya, varietas objek yang sama sekali berbeda biasanya tidak boleh disimpan dalam obat generik.

Objek apa pun diizinkan untuk disimpan tanpa obat generik.

// declaring an inventory with the title dataList

Listing dataList= new ArrayList();    

// including integer into the dataList 

dataList.add(10);  

// including string information into the dataList 

dataList.add("10"); 

Dengan obat generik, kami harus menginformasikan jenis barang yang ingin kami jual ke pengecer.

Mendeklarasikan inventori dengan judul dataList

Listing<Integer> dataList= new ArrayList();  

Termasuk integer ke dalam dataList 

dataList.add(10);  

Termasuk informasi string ke dalam daftar data 

dataList.add("10"); // however this assertion offers compile-time error  

2. Tidak Ingin Melakukan Sortir Casting

Pengecoran jenis objek seharusnya tidak diperlukan dengan obat generik.

Diperlukan untuk melakukan casting lebih awal dari pengenalan umum.

declaring an inventory with the title dataList

Listing dataList= new ArrayList();    

including a component to the dataList 

dataList.add("hey");    

typecasting    

String s = (String) dataList.get(0);

Tidak ada yang namanya keinginan untuk pengecoran jenis objek setelah obat generik.

// declaring an inventory with the title dataList

Listing<String> dataList= new ArrayList<String>();    

// including a component to the dataList 

dataList.add("hey");   

//typecasting shouldn't be required 

String s = dataList.get(0);

3. Memeriksa pada Waktu Kompilasi

Poin tidak akan terjadi pada waktu proses karena diperiksa pada waktu kompilasi. Dan sebagai tanggapan atas metode pemrograman yang baik, penanganan kerugian yang dilakukan pada waktu kompilasi jauh lebih baik daripada penanganan yang dilakukan pada waktu proses. 

// declaring an inventory with the title dataList

Listing<String> dataList = new ArrayList<String>();    

// including a component into the dataList 

dataList .add("hey");    

// attempt to add an integer within the dataList however this assertion will give compile-time error

dataList .add(32);

Sintaksis:

Generic assortment can be utilized as :

ClassOrInterface<Sort>    

Instance:

An instance of how generics are utilized in java is given under:

ArrayList<String>  

Contoh Program Generik Java

Kelas ArrayList digunakan pada contoh ini. Namun alih-alih kelas ArrayList, semua kelas kerangka kerja bermacam-macam dapat digunakan, seperti Comparator, HashMap, TreeSet, HashSet, LinkedList, ArrayList, dll.

// importing packages 

import java.util.*;

// creating a category with the title GenericsExample

class GenericsExample 

    // fundamental methodology

    public static void fundamental(String args[]) 

        // declaring an inventory with the title dataList to retailer String parts

        ArrayList < String > dataList = new ArrayList < String > ();

        // including a component into the dataList 

        dataList.add("hina");

        // including a component into the dataList 

        dataList.add("rina");

        // if we attempt to add an integer into the dataList then it is going to give a compile-time error

        //dataList.add(32); //compile time error  

        // accessing aspect from dataList 

        String s = dataList.get(1); //no want of kind casting

        // printing a component of the record

        System.out.println("aspect is: " + s);

        // for iterating over the dataList parts

        Iterator < String > itr = dataList.iterator();

        // iterating and printing the weather of the record

        whereas (itr.hasNext()) 

            System.out.println(itr.subsequent());

        

    


Keluaran

aspect is: rina

hina

rina

Instance Generik Java Memanfaatkan Peta

Dalam hal ini, kami menggunakan peta untuk menunjukkan contoh umum. Peta memungkinkan penyimpanan informasi dalam jenis pasangan kunci-nilai. 

// importing packages 

import java.util.*;

// creating a category with the title GenericsExample

class GenericsExample 

    // fundamental methodology

    public static void fundamental(String args[]) 

        // declaring a map for storing keys of Integer kind with String values

        Map < Integer, String > dataMap = new HashMap < Integer, String > ();

        // including some key worth into the dataMap

        dataMap.put(3, "seema");

        dataMap.put(1, "hina");

        dataMap.put(4, "rina");

        // utilizing dataMap.entrySet() 

        Set < Map.Entry < Integer, String >> set = dataMap.entrySet();

        // creating an iterator for iterating over the dataMap

        Iterator < Map.Entry < Integer, String >> itr = set.iterator();

        // iterating for printing each key-value pair of map

        whereas (itr.hasNext()) 

            // kind casting shouldn't be required

            Map.Entry e = itr.subsequent();

            System.out.println(e.getKey() + " " + e.getValue());

        



    

Keluaran:

Kelas Generik

Kelas generik adalah kategori yang dapat berunding dengan jenis apa pun. Dan di sini, untuk membuat kelas generik jenis tertentu, kami menggunakan parameter jenis T. 

Deklarasi kelas generik jauh seperti deklarasi kelas non-generik, selain itu bagian parameter pengurutan ditulis setelah judul kategori. Parameter 1 atau beberapa jenis diperbolehkan dalam bagian parameter jenis. 

Deklarasi kelas generik tampak seperti deklarasi kelas non-generik, selain itu judul kategori diadopsi oleh bagian parameter jenis. Karena sejumlah parameter diterima, maka Varietas berparameter atau kursus berparameter adalah nama lain untuk itu. 

Dan contohnya diberikan di bawah untuk menunjukkan penggunaan dan pembuatan kursus umum.

Pembuatan Kelas Generik

class GenericClassExample < T > 

    T object;

    void addElement(T object) 

        this.object = object;

    

    T get() 

        return object;

    

Di sini jenis T menunjukkan bahwa ia dapat berunding dengan jenis apa pun, seperti Worker, String, dan Integer. Jenis yang Anda tentukan untuk kategori tersebut digunakan untuk penyimpanan dan pengambilan informasi. 

Implementasi Kelas Generik

Allow us to see an instance for a greater understanding of generic class utilization

// creating a category with the title GenericExample

class GenericExample 

    // fundamental methodology

    public static void fundamental(String args[]) 

        // utilizing the generic class created within the above instance with the Integer kind

        GenericClassExample < Integer > m = new GenericClassExample < Integer > ();

        // calling addElement for the m

        m.addElement(6);

        // if we attempt to name addElement with the string kind aspect then it is going to give a compile-time error

        //m.addElement("hina"); //Compile time error  

        System.out.println(m.get());

    

Keluaran

Metodologi Generik

Sama seperti kelas generik, strategi generik juga dapat dibuat. Dan argumen apa pun dapat diterima oleh metodologi generik. Deklarasi metodologi generik sama seperti metodologi generik, namun cakupan parameter sortir dilarang untuk taktik di mana deklarasi telah dilakukan. Strategi generik diperbolehkan statis dan non-statis. 

Izinkan kami memahami metodologi umum Java dengan sebuah contoh. Di sini adalah contoh mencetak cuaca dari sebuah array . Di sini E digunakan untuk mewakili bagian.

// creating a category with the title GenericExample

public class GenericExample 

    // making a generic methodology for printing the weather of an array

    public static < E > void printElements(E[] parts) 

        // iterating over parts for printing parts of an array

        for (E curElement: parts) 

            System.out.println(curElement);

        

        System.out.println();

    

    // fundamental methodology

    public static void fundamental(String args[]) 

        // declaring an array having Integer kind parts

        Integer[] arrayOfIntegerElements = 

            10,

            20,

            30,

            40,

            50

        ;

        // declaring an array having character-type parts


        Character[] arrayOfCharacterElements = 

            'J',

            'A',

            'V',

            'A',

            'T',

            'P',

            'O',

            'I',

            'N',

            'T'

        ;


        System.out.println("Printing an parts of an Integer Array");

        // calling generic methodology printElements for integer array 

        printElements(arrayOfIntegerElements);

        System.out.println("Printing an parts of an Character Array");


        // calling generic methodology printElements for character array 

        printElements(arrayOfCharacterElements);

    

Keluaran:

Printing an parts of an Integer Array

10

20

30

40

50



Printing an parts of an Character Array

J

A

V

A

T

P

O

I

N

T

Wildcard di Java Generik

Bagian wildcard dalam obat generik diwakili oleh gambar tanda kueri (?). Dan segala jenis diwakili olehnya. Jika <? extends Quantity> ditulis oleh kami, maka ini menyiratkan Quantity apa pun yang mirip dengan (double, float, dan Integer) kelas kecil. Sekarang metodologi kelas kuantitas dapat dikenal dari salah satu kursus anak-anak. Wildcard dapat digunakan sebagai jenis variabel asli, jenis kembalian, subjek, atau Parameter. Namun, wildcard tidak dapat digunakan sebagai argumen yang baik untuk pemanggilan metodologi generik atau pembuatan acara generik.

Izinkan kami untuk melihat wildcard di Java generik dengan bantuan contoh di bawah ini:

// importing packages

import java.util.*;

// creating an summary class with the title Animal

summary class Animal 

    // creating an summary methodology with the title eat

    summary void eat();



// creating a category with the title Cat which inherits the Animal class

class Cat extends Animal 

    void eat() 

        System.out.println("Cat can eat");

    



// creating a category with the title Canine which inherits the Animal class

class Canine extends Animal 

    void eat() 

        System.out.println("Canine can eat");

    



// creating a category for testing the wildcards of java generics

class GenericsExample 

    //creating a way by which solely Animal little one courses are accepted 

    public static void animalEat(Listing << ? extends Animal > lists) 

        for (Animal a: lists) 

            //Animal class methodology calling by the occasion of the kid class

            a.eat();

        

    

    // fundamental methodology

    public static void fundamental(String args[]) 

        // creating an inventory of kind Cat

        Listing < Cat > record = new ArrayList < Cat > ();

        record.add(new Cat());

        record.add(new Cat());

        record.add(new Cat());

        // creating an inventory of kind Canine

        Listing < Canine > list1 = new ArrayList < Canine > ();

        list1.add(new Canine());

        list1.add(new Canine());

        // calling animalEat for record

        animalEat(record);

        // calling animalEat for list1

        animalEat(list1);

    

Keluaran:

Cat can eat

Cat can eat

Cat can eat

Canine can eat

Canine can eat

Wildcard Batas Tinggi

Tujuan utama memanfaatkan wildcard batas atas adalah untuk mengurangi batasan variabel. Jenis yang tidak diketahui dibatasi olehnya untuk menjadi jenis atau subtipe tertentu dari jenis tertentu. Higher Bounded Wildcard digunakan dengan menulis gambar tanda kueri, kemudian memperluas kata kunci jika ada kelas dan menerapkan kata kunci untuk antarmuka, setelah itu kata kunci yang lebih tinggi ditulis.

Sintaks Wildcard Tertentu Lebih Tinggi

 ? extends Sort. 

Contoh Wildcard Tertentu Lebih Tinggi

Izinkan kami untuk melihat Wildcard Tertentu Lebih Tinggi dengan sebuah contoh. Di sini, wildcard tertentu yang lebih tinggi digunakan oleh kami untuk penulisan metodologi Listing<Double> dan Listing<Integer>.

// importing packages

import java.util.ArrayList;

// creating a category with the title UpperBoundWildcardExample 

public class UpperBoundWildcardExample 

    // creating a way by utilizing higher bounded wildcards

    personal static Double sum(ArrayList << ? extends Quantity > record) 



        double add = 0.0;



        for (Quantity n: record) 

            add = add + n.doubleValue();

        



        return add;

    

    // fundamental methodology

    public static void fundamental(String[] args) 

        // creating an inventory of integer kind

        ArrayList < Integer > list1 = new ArrayList < Integer > ();

        // including parts to the list1

        list1.add(30);

        list1.add(40);

        // calling sum methodology for printing sum

        System.out.println("Sum is= " + sum(list1));

        // creating an inventory of double kind

        ArrayList < Double > list2 = new ArrayList < Double > ();

        list2.add(10.0);

        list2.add(20.0);

        // calling sum methodology for printing sum

        System.out.println("Sum is= " + sum(list2));





    



Keluaran:

Sum is= 70.0

Sum is= 30.0

Wildcard tanpa batas

Catatan jenis tidak dikenal ditentukan oleh wildcard tak terbatas seperti Listing<?>.

Contoh Wildcard Tak Terbatas

// importing packages

import java.util.Arrays;

import java.util.Listing;

// creating a category with the title UnboundedWildcardExample 

public class UnboundedWildcardExample 

    // creating a way displayElements by utilizing Unbounded Wildcard

    public static void displayElements(Listing << ? > record) 



        for (Object n: record) 

            System.out.println(n);

        



    



    // fundamental methodology

    public static void fundamental(String[] args) 

        // creating an inventory of kind integer

        Listing < Integer > list1 = Arrays.asList(6, 7, 8);

        System.out.println("printing the values of integer record");

        // calling displayElements for list1  

        displayElements(list1);

        // creating an inventory of kind string

        Listing < String > list2 = Arrays.asList("six", "seven", "eight");

        System.out.println("printing the values of string record");

        // calling displayElements for list2

        displayElements(list2);

    

Keluaran:

printing the values of integer record

6

7

8

printing the values of string record

six

seven

eight

Kurangi Wildcard Berbatas

Turunkan Bounded Wildcard digunakan untuk membatasi jenis yang tidak diketahui menjadi jenis tertentu atau supertype dari jenis yang sebenarnya. Batas Bawah Wildcard digunakan dengan menulis gambar tanda kueri diikuti dengan kata kunci luar biasa, lalu menulis yang lebih rendah pasti.

Sintaks Pengurangan Wildcard Tertentu

 ? tremendous Sort. 

Contoh Penurunan Wildcard Tertentu

// importing packages

import java.util.*;

// creating a category with the title LowerBoundWildcardExample 

public class LowerBoundWildcardExample 

    // creating a way by utilizing higher bounded wildcards

    personal static void displayElements(Listing << ? tremendous Integer > record) 



        for (Object n: record) 

            System.out.println(n);

        

    



    // fundamental methodology

    public static void fundamental(String[] args) 

        // creating an inventory of kind integer

        Listing < Integer > list1 = Arrays.asList(6, 7, 8);

        System.out.println("printing the values of integer record");

        // calling displayElements for list1  

        displayElements(list1);

        // creating an inventory of kind string

        Listing < Quantity > list2 = Arrays.asList(8.0, 9.8, 7.6);

        System.out.println("printing the values of string record");

        // calling displayElements for list2

        displayElements(list2);

    

Keluaran: 

printing the values of integer record

6

7

8

printing the values of string record

8.0

9.8

7.6

Kesimpulan

  • Setelah pengenalan generik dalam bahasa pemrograman Java, pemrogram dipaksa untuk menyimpan varietas objek eksplisit.
  • Sort security, No need for kind casting, dan Checking pada waktu kompilasi adalah Tiga manfaat mendasar menggunakan obat generik.
  • Kelas generik adalah kategori yang dapat berunding dengan jenis apa pun.
  • Sama seperti kelas generik, strategi generik juga dapat dibuat. Dan argumen apa pun dapat diterima oleh metodologi generik. 
  • Bagian wildcard dalam obat generik diwakili oleh gambar tanda kueri (?).
  • Higher Bounded, Reduce Bounded, dan Unbounded adalah tiga jenis wildcard di Java generik.