java-浅入浅出泛型

写一个输出数组的方法。但是数组的类型有很多,如int ,double,float,字符串等等。为了输出不同类型的数组,我们需要些很多种方法,但其实这些方法除了数组类型不同,其余都是相同的,这是方法重载。

public class InputArrayTest {
    public static void printArray(int[] inputArray){
        for (int array:inputArray){
            System.out.print(array+" ");
        }
        System.out.println();           
    }
    public static void printArray(double[] inputArray){
        for (double array:inputArray){
            System.out.print(array+" ");
        }
        System.out.println();           
    }
    public static void printArray(String[] inputArray){
        for (String array:inputArray){
            System.out.print(array+" ");
        }
        System.out.println();           
    }
    public static void main(String[] args) {
        
        int a[]={1,2,3};
        double b[]={1.1,2.2,3.3};
        String c[]={"a","b","c"};
        printArray(a);
        printArray(b);
        printArray(c);      
    }
}

显然,方法重载就是一种浪费。那么我们是不是可以只写一个方法,却可以让他处理不同类型的数组呢。这就是泛型的作用。

public class InputArrayTestTwo {
    public static  void printArray( E[] inputArray )
       {          
             for ( E element : inputArray ){        
                System.out.print(element+" " );
             }
             System.out.println();
        }

    public static void main(String[] args) {
        Integer[] intArray={1,2,3};
               Double[] doubleArray={1.1,2.2,3.3};
               String[] stringArray={"a","b","c"};
                printArray(intArray);
        printArray(doubleArray);
        printArray(stringArray);
    }
}

也许,有的时候,即使我们希望一个方法可以处理多种类型参数,但同时也希望有个限制,因此就有了有界的类型参数。例如我们只希望数组输出的对象是数字,字符串不允许输出。
可能有时候,你会想限制那些被允许传递到一个类型参数的类型种类范围。例如,一个操作数字的方法可能只希望接受Number或者Number子类的实例。这就是有界类型参数的目的。
要声明一个有界的类型参数,首先列出类型参数的名称,后跟extends关键字,最后紧跟它的上界。

public class InputArrayTest{
    public static  void printArray( E[] inputArray )
       {          
             for ( E element : inputArray ){        
                System.out.print(element+" " );
             }
             System.out.println();
        }

    public static void main(String[] args) {
        Integer[] intArray={1,2,3};
       Double[] doubleArray={1.1,2.2,3.3};
    
       printArray(intArray);
        printArray(doubleArray);

    }

}

以上均是泛型方法。
下面是泛型类

public class Box {
    private T t;
     
      public void add(T t) {
        this.t = t;
      }  
      public T get() {
        return t;
      } 
      public static void main(String[] args) {
         Box integerBox = new Box();
         Box stringBox = new Box();
       
         integerBox.add(new Integer(10));
         stringBox.add(new String("Hello World"));
     
         System.out.printf("Integer Value :%d\n\n", integerBox.get());
         System.out.printf("String Value :%s\n", stringBox.get());
      }
}

你可能感兴趣的:(java-浅入浅出泛型)