Java泛型入门

使用Java泛型,我们可以写一个泛型方法来对一个对象数组排序,然后,调用该泛型来对整形数组、浮点数数组、字符串数组等进行排序。


1. 泛型方法

下面是定义泛型方法的规则:

所有泛型方法什么都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前。


下面是一个泛型方法的实例:

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( "Array integerArray contains:" );
        printArray( intArray  ); // 传递一个整型数组

        System.out.println( "\nArray doubleArray contains:" );
        printArray( doubleArray ); // 传递一个双精度型数组

        System.out.println( "\nArray characterArray contains:" );
        printArray( charArray ); // 传递一个字符型型数组
    } 
}


交换数组中的两个元素的位置的泛型方法定义如下:

public static  void swap(T[] array, int i, int j) {
        T temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }


  • 用于放置泛型的类型参数的尖括号应出现在方法的其它所有修饰符之后和在方法的的返回类型之前,按照惯例,通常使用某单个大写字母表示。
  • 注意类型参数只能代表引用型类型,不能是原始类型。swap(new int[3, 5], 0, 1); 语句是会编译报错的。
  • 普通方法、构造方法、静态方法都可以使用泛型。
  • 在泛型中可以同时使用多个类型参数,在定义时用尖括号分开,例如:

private static  void sayHello(K k, V v) {

    }


2. 泛型中的 ? 通配符

    public static void trans1(Collection collection) {
        return;
    }

    public static void trans2(Collection collection) {
        return;
    }


3. 泛型类

public class Box {
 
  private T t;
 
  public void add(T t) {
    this.t = t;
  }
 
  public T get() {
    return t;
  }
  
}

注意:

在对泛型类进行参数化时,类型参数的实例必须是引用类型,不能使基本类型。

当一个变量被声明为泛型时,只能被实例变量和方法调用,而不能被静态变量和静态方法调用。



你可能感兴趣的:(编程技巧和总结,java编程)