泛型的用法

作者: 涛涛123759 | 来源:发表于2016-10-11 13:17 被阅读41次

    一、泛型方法
    1、函数的参数是泛型
    下面是定义泛型方法的规则:
    所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的<E>)。
    每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
    类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
    泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。

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

    2、函数的返回值是泛型

    第一种:

     public static <T extends CommonService> T getService(Class<T> clazz) {        
            T service = (T) serviceMap.get(clazz.getName());       
            if (service == null) {            
                    service = (T)   ServiceLocator.getService(clazz.getName());            
                   serviceMap.put(clazz.getName(), service);      
            }      
            return service;   
    }
    

    第二种:

      public static <T> T getService(Class<? extends CommonService> clazz) {       
             T service = (T) serviceMap.get(clazz.getName());        
             if (service == null) {           
                      service = (T) ServiceLocator.getService(clazz.getName());          
                      serviceMap.put(clazz.getName(), service);     
             }        
            return service;   
     }
    

    第一种泛型方法:返回值和参数值的类型是一致,推荐使用;
    第二种泛型方法:返回值和参数值的类型不是一致,请谨慎或避免使用。

    二、泛型类

    泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

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

    相关文章

      网友评论

        本文标题:泛型的用法

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