zoukankan      html  css  js  c++  java
  • Java泛型理解

      Java泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。当需要使用某一种算法时,又无法具体算法的数据类型,或者想指定类型值的上限或下限,那么这时就需要Java泛型来大显身手了!

      泛型方法的规则:

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

      实例:

      一、定义一个泛型方法来打印对象数组元素

     1   public static <E> void printArray(E[] inputArray){
     2         for(E elements:inputArray){
     3             System.out.print(elements);
     4         }
     5     }
     6 
     7     public static void main(String[] args){
     8         Integer[] intArray={4,5,6,5,8};
     9         Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
    10         Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
    11 
    12         System.out.println( "整型数组元素为:" );
    13         printArray( intArray  );
    14 
    15         System.out.println( "
    双精度型数组元素为:" );
    16         printArray( doubleArray );
    17 
    18         System.out.println( "
    字符型数组元素为:" );
    19         printArray( charArray );
    20     }

      二、定义一个泛型方法来对数字进行排序(extends 使用)

     1 public static <E extends Comparable> E searchMaxnumber(E x,E y,E z){
     2         E maxNumber=x;
     3         if(y.compareTo(maxNumber) > 0){
     4             maxNumber=y;
     5         }
     6         if(z.compareTo(maxNumber)>0){
     7             maxNumber=z;
     8         }
     9         return maxNumber;
    10     }
    11 
    12     public static void main(String[] args){
    13         System.out.printf( "%d, %d 和 %d 中最大的数为 %d
    
    ",
    14                 3, 4, 5, searchMaxnumber( 3, 4, 5 ) );
    15         System.out.printf( "%.1f, %.1f 和 %.1f 中最大的数为 %.1f
    
    ",
    16                 6.6, 8.8, 7.7, searchMaxnumber( 6.6, 8.8, 7.7 ) );
    17         System.out.printf( "%s, %s 和 %s 中最大的数为 %s
    ","pear",
    18                 "apple", "orange", searchMaxnumber( "pear", "apple", "orange" ) );
    19     }

      三、泛型类的定义

     1 public class GenericityExam<E> {
     2 
     3    private E e;
     4 
     5    public E get(){
     6        return e;
     7    }
     8 
     9    public void put(E e){
    10        this.e=e;
    11    }
    12 
    13     public static void main(String[] args) {
    14         GenericityExam<Integer> integerVal = new GenericityExam<Integer>();
    15         GenericityExam<Character> charVal = new GenericityExam<Character>();
    16 
    17         integerVal.put(new Integer(10));
    18         charVal.put(new Character('s'));
    19 
    20         System.out.printf("整型值为 :%d
    ", integerVal.get());
    21         System.out.printf("字符为 :%c
    ", charVal.get());
    22     }
    23 
    24 }

      四、类型通配符上限泛型

    
    
    public static <E> void listGen(List<? extends E> data){
    for(E listData:data){
    System.out.println("data :" + listData);
    }
    }

    public static void main(String[] args) {
    List<Integer> listIn = new ArrayList<>();
    List<Number> listNu = new ArrayList<>();

    listIn.add(18);
    listIn.add(45);
    listNu.add(314);
    listNu.add(789);

    listGen(listIn);
    listGen(listNu);
    }
    • <? extends E>表示该通配符所代表的类型是E类型的子类。
    • <? super E>表示该通配符所代表的类型是E类型的父类。

      泛型定义好后,在运行期间会变化为Object类型。

  • 相关阅读:
    centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs,base64,jq 第十六节课
    centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课
    一个兼职DBA的数据库运维经验 小米科技 xx@xiaomi.com 2011
    centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课
    HTML5矢量实现文件上传进度条
    基于HTML5的WebGL呈现A星算法3D可视化
    基于HTML5的WebGL呈现A星算法的3D可视化
    基于HTML5的WebGL设计汉诺塔3D游戏
    基于HTML5树组件延迟加载技术实现
    基于HTML5的WebGL电信网管3D机房监控应用
  • 原文地址:https://www.cnblogs.com/award/p/9096779.html
Copyright © 2011-2022 走看看