zoukankan      html  css  js  c++  java
  • java中的泛型

    一、泛型的理解

    泛型是JDK1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法,其作用类似于C++中的模板(templates),但是并不完全一样。泛型在java中主要应用在集合接口中。

    • 增加泛型支持后的集合,可以记住集合中元素的类型,并可以在编译时检查元素的类型
    • 增加泛型支持后的集合,可以让代码更加简洁、程序更加健壮
    • java泛型还增加了枚举类、反射等方面的功能,使程序更加灵活

    二、泛型的使用

    • 不使用泛型,编译时不检查类型的异常
    • 使用泛型,编译时自动检查类型
     1 public class GenericsDemo {
     2 
     3     public static void main(String[] args) {
     4 //        noGenerics();
     5         generics();
     6     }
     7 
     8     //使用泛型的情况
     9     private static void generics() {
    10         ArrayList<String> strList = new ArrayList<String>();
    11         strList.add("liming");
    12         strList.add("wangfeng");
    13         //此处试图加入一个Integer对象,编译报错
    14 //        strList.add(100);
    15         for (int i = 0; i < strList.size(); i++) {
    16             //不需要强制转换
    17             String string = strList.get(i);
    18             System.out.println(string);
    19         }
    20     }
    21 
    22     //不使用泛型的情况
    23     private static void noGenerics() {
    24         ArrayList strList = new ArrayList();
    25         strList.add("liming");
    26         strList.add("wangfeng");
    27         //此处不小心加入了一个Integer对象
    28         strList.add(100);
    29         for (int i = 0; i < strList.size(); i++) {
    30             //strList中的元素全是Object类型,所以需要强制转换,但是最后一个元素会出现ClassCastException异常
    31             //因为我们试图把最后一个元素的Integer类型转换为String类型
    32             String string = (String)strList.get(i);
    33             System.out.println(string);
    34         }
    35     }
    36 }

    三、泛型的深入理解

     泛型的适用范围:当接口、类及方法中的操作的引用数据类型不确定的时候,以前用的Object来进行扩展的,现在可以用泛型来表示。这样可以避免强转的麻烦,而且将运行问题转移到的编译时期。

    但是需要注意几点:

    • 泛型的类型参数只能是类类型(包括自定义类),不能是简单类型,并且泛型的类型参数可以有多个
    • 泛型到底代表什么类型取决于调用者传入的类型,如果没传,默认是Object类型
    • 使用带泛型的类创建对象时,等式两边指定的泛型必须一致
    • 等式两边可以在任意一边使用泛型,在另一边不使用(考虑向后兼容)

    先写到这里,以后再详细介绍。。。

  • 相关阅读:
    使用REST风格完成MVC前后端分离
    MySQL数据库开发常见问题及几点优化!
    springboot 使用JPA自动生成Entity实体类的方法
    mybatis-plus 自动生成代码
    springboot中使用ContextLoaderListener.getCurrentWebApplicationContext();获取WebApplicationContext为空问题
    Java 7 使用TWR(Try-with-resources)完成文件copy
    MySQL 删除数据库
    MySQL 创建数据库
    MySQL 创建数据表
    JDBC Java 连接 MySQL 数据库
  • 原文地址:https://www.cnblogs.com/Wilange/p/7735984.html
Copyright © 2011-2022 走看看