Latest web development tutorials

Java rodzajowych

rodzajowych Java (rodzajów) to nowa funkcja wprowadzona w JDK 5, generyczne zapewnienia bezpieczeństwa w czasie kompilacji typu mechanizm testowania, która pozwala programiście w czasie kompilacji typu wykrytego nielegalne.

Ogólny charakter sparametryzowane, typ danych oznacza, że ​​operacja jest określony jako parametr.

Załóżmy, że mamy taki wymóg: napisać metodę sortowania, zdolnej do kształtowania tablicy, tablica ciągów ani żadnego innego rodzaju tablicy do sortowania, jak to osiągnąć?

Odpowiedź jest taka, że można użyć rodzajowych Java.

Korzystanie Java rodzajowych, możemy napisać ogólny sposób sortowania tablicy obiektów. Następnie, należy wywołać metodę rodzajową do tablicy liczb całkowitych, pływające tablice punktowe, ciągi znaków, tablic i sortować.


metoda ogólna

Można napisać metoda rodzajowa, które mogą być otrzymane podczas wywoływania różnego rodzaju parametrów. Z typem parametru metody rodzajowej, umowa kompilator z każdym wywołaniu metody z przeniesieniem się odpowiednio.

Oto zasady definiowania metody rodzajowe:

  • Wszyscy deklarują metoda rodzajowa ma typ sekcji deklaracji parametru (oddzielone nawiasach kątowych), sekcji deklaracji parametru Typ zanim rodzaju metody zysku (w poniższym przykładzie <E>).
  • Każdy typ sekcji deklaracji parametrów zawiera jeden lub więcej parametrów typu, rozdzielając je przecinkami między parametrami. Ogólny parametr, znany również jako rodzaj identyfikatora zmiennej służy do określania nazwy typu rodzajowego.
  • Parametry typu mogą być wykorzystywane do zadeklarować typ zwracany, i można je otrzymać jako ogólny rzeczywisty typ parametr zastępczy.
  • Oświadczam, metoda rodzajowa i innych metod, takich jak ciała. Należy pamiętać, że typ parametru typ może reprezentować tylko typ odwołania, a nie prymitywne typu (jak int, double, char, itd.).

Przykłady

Poniższy przykład pokazuje, jak korzystać z metody rodzajowe różne elementy druku ciągów:

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 ); // 传递一个字符型数组
    } 
}

Skompilować powyższy kod, wyniki przedstawiają się następująco:

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

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

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

Istnieją ograniczone parametry typu:

Może się zdarzyć, będą chciały ograniczyć kto może przejść do parametru typu rodzaju zasięgu typu. Na przykład metoda cyfrowa pracy może tylko chce przyjąć instancje numeru lub numer podklasy. To jest cel ograniczonego parametru typu.

Aby zadeklarować ograniczony parametr typu, nazwa parametru Typ jest wymieniony jako pierwszy, a następnie słowa kluczowego rozciąga się wreszcie po jego górnej granicy.

Przykłady

Poniższy przykład demonstruje "rozciąga" Jak używać w sensie ogólnym znaczeniu "rozciąga" (kategoria) lub "narzędzi" (interfejs). Przykład sposobu rodzajowego powraca do maksymalnie trzy przedmioty porównywalne.

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

Skompilować powyższy kod, wyniki przedstawiają się następująco:

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

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

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

Generic klasy

Podobne deklaracje i oświadczenia non-generic klasy generycznej klasy, oprócz nazwy klasy, dołącz do sekcji deklaracji typu parametru.

I metody ogólne, rodzajowe typu klasa sekcji deklaracji parametru zawiera również jeden lub więcej parametrów typu, rozdzielając je przecinkami między parametrami. Ogólny parametr, znany również jako rodzaj identyfikatora zmiennej służy do określania nazwy typu rodzajowego. Bo oni akceptują jeden lub więcej parametrów, klasy te nazywane są parametryzowane klas lub parametryzowane typy.

Przykłady

Poniższe przykłady pokazują, jak definiujemy rodzajową klasę:

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

Skompilować powyższy kod, wyniki przedstawiają się następująco:

整型值为 :10

字符串为 :本教程