Latest web development tutorials

Java Generics

Jawa generik (generik) adalah fitur baru yang diperkenalkan di JDK 5, obat generik menyediakan waktu kompilasi mekanisme pengujian keselamatan jenis yang memungkinkan programmer untuk waktu kompilasi jenis ilegal terdeteksi.

Sifat generik jenis parameter, tipe data berarti bahwa operasi ditentukan sebagai parameter.

Misalkan kita memiliki persyaratan seperti: menulis sebuah metode pengurutan, mampu membentuk array, array dari string atau jenis lain dari array untuk mengurutkan, bagaimana untuk mencapai?

Jawabannya adalah bahwa Anda dapat menggunakan obat generik Java.

Gunakan Jawa Generik, kita dapat menulis sebuah metode generik untuk mengurutkan array obyek. Kemudian, memanggil metode generik untuk sebuah array bilangan bulat, floating point array, string, array, dan diurutkan.


metode generik

Anda dapat menulis sebuah metode generik yang dapat diterima saat memanggil berbagai jenis parameter. Untuk jenis parameter metode generik, kesepakatan compiler dengan masing-masing metode panggilan dari transfer tepat.

Berikut adalah aturan untuk menentukan metode generik:

  • Semua menyatakan metode generik memiliki tipe bagian parameter deklarasi (dipisahkan oleh kurung sudut), bagian deklarasi jenis parameter sebelum jenis metode kembali (dalam contoh berikut <E>).
  • Setiap jenis bagian parameter deklarasi berisi satu atau lebih jenis parameter, dipisahkan dengan koma antara parameter. Sebuah parameter generik, juga dikenal sebagai jenis variabel identifier yang digunakan untuk menentukan nama jenis generik.
  • jenis parameter dapat digunakan untuk menyatakan jenis kembali, dan dapat diperoleh sebagai sebenarnya jenis parameter placeholder generik.
  • Mendeklarasikan metode generik dan metode lain, seperti tubuh. Perhatikan bahwa jenis jenis parameter hanya dapat mewakili tipe referensi, bukan tipe primitif (seperti int, double, char, dll).

contoh

Contoh berikut menunjukkan bagaimana menggunakan metode generik elemen cetak string yang berbeda:

public class GenericMethodTest
{
   // 泛型方法 printArray                         
   public static < E > void printArray( E[] inputArray )
   {
      // 输出数组元素            
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }

    public static void main( String args[] )
    {
        // 创建不同类型数组: Integer, Double 和 Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

        System.out.println( "整型数组元素为:" );
        printArray( intArray  ); // 传递一个整型数组

        System.out.println( "\n双精度型数组元素为:" );
        printArray( doubleArray ); // 传递一个双精度型数组

        System.out.println( "\n字符型数组元素为:" );
        printArray( charArray ); // 传递一个字符型数组
    } 
}

Mengkompilasi kode di atas, hasilnya adalah sebagai berikut:

整型数组元素为:
1 2 3 4 5 

双精度型数组元素为:
1.1 2.2 3.3 4.4 

字符型数组元素为:
H E L L O 

Ada jenis parameter dibatasi:

Mungkin ada kali Anda akan ingin membatasi siapa yang diizinkan untuk lolos ke parameter jenis jenis berbagai jenis. Misalnya, metode digital operasi mungkin hanya ingin menerima contoh Nomor Jumlah subclass. Ini adalah tujuan dari jenis parameter dibatasi.

Untuk menyatakan jenis parameter dibatasi, jenis nama parameter terdaftar pertama, diikuti oleh kata kunci meluas, akhirnya diikuti batas atas nya.

contoh

Contoh berikut menunjukkan "meluas" Cara Menggunakan dalam arti makna generik "meluas" (kategori) atau "alat" (Interface). Contoh dari metode generik mengembalikan maksimum tiga objek yang sebanding.

public class MaximumTest
{
   // 比较三个值并返回最大值
   public static <T extends Comparable<T>> T maximum(T x, T y, T z)
   {                     
      T max = x; // 假设x是初始最大值
      if ( y.compareTo( max ) > 0 ){
         max = y; //y 更大
      }
      if ( z.compareTo( max ) > 0 ){
         max = z; // 现在 z 更大           
      }
      return max; // 返回最大对象
   }
   public static void main( String args[] )
   {
      System.out.printf( "%d, %d 和 %d 中最大的数为 %d\n\n",
                   3, 4, 5, maximum( 3, 4, 5 ) );
 
      System.out.printf( "%.1f, %.1f 和 %.1f 中最大的数为 %.1f\n\n",
                   6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );
 
      System.out.printf( "%s, %s 和 %s 中最大的数为 %s\n","pear",
         "apple", "orange", maximum( "pear", "apple", "orange" ) );
   }
}

Mengkompilasi kode di atas, hasilnya adalah sebagai berikut:

3, 4 和 5 中最大的数为 5

6.6, 8.8 和 7.7 中最大的数为 8.8

pear, apple 和 orange 中最大的数为 pear

kelas generik

deklarasi serupa dan laporan kelas non-generik kelas generik, di samping nama kelas, menambahkan jenis parameter bagian deklarasi.

Dan metode generik, generik jenis kelas bagian parameter deklarasi juga mengandung satu atau lebih jenis parameter, dipisahkan dengan koma antara parameter. Sebuah parameter generik, juga dikenal sebagai jenis variabel identifier yang digunakan untuk menentukan nama jenis generik. Karena mereka menerima satu atau lebih parameter, kelas ini disebut kelas parameter atau jenis parameter.

contoh

Contoh berikut menunjukkan bagaimana kita mendefinisikan kelas generik:

public class Box<T> {
   
  private T t;

  public void add(T t) {
    this.t = t;
  }

  public T get() {
    return t;
  }

  public static void main(String[] args) {
    Box<Integer> integerBox = new Box<Integer>();
    Box<String> stringBox = new Box<String>();

    integerBox.add(new Integer(10));
    stringBox.add(new String("本教程"));

    System.out.printf("整型值为 :%d\n\n", integerBox.get());
    System.out.printf("字符串为 :%s\n", stringBox.get());
  }
}

Mengkompilasi kode di atas, hasilnya adalah sebagai berikut:

整型值为 :10

字符串为 :本教程