美文网首页
java-浅入浅出泛型

java-浅入浅出泛型

作者: snoweek | 来源:发表于2016-02-11 15:42 被阅读185次

    写一个输出数组的方法。但是数组的类型有很多,如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 <E> 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 <E extends Number> 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 <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("Hello World"));
         
             System.out.printf("Integer Value :%d\n\n", integerBox.get());
             System.out.printf("String Value :%s\n", stringBox.get());
          }
    }
    

    相关文章

      网友评论

          本文标题:java-浅入浅出泛型

          本文链接:https://www.haomeiwen.com/subject/cihukttx.html