zoukankan      html  css  js  c++  java
  • 泛型

    定义:

      类型由原来的具体的类型变为未知的类型,约束类型的定义的类编写时确定变为声明类的时候确定.

    理解:

      统一数据类型却不固定数据类型,只作用在代码编译阶段.

    产生原因:

      控制传入数据类型的一致性,但又不固定传入的类型

    泛型的可用位置:

    1,泛型接口 2,泛型类 3,泛型方法

    案例:

    package fx;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class GenericTest {
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add("qq");
            list.add("weixin");
            list.add(100);
            for(int i=0;i<list.size();i++){
                String name = (String)list.get(i);//第三次转型报错java.lang.ClassCastException
                System.out.println("name:"+name);
            }
        }
    }

    由上例子中可以看出,没有泛型的不安全,容易造成这样的疏忽.加上泛型以后,编译检查期间就会做类型检查,避免了上述错误.

    list.add(100);//编译检查报错

    泛型注意事项:

    1,没有泛型数组

    2,声明时泛型的传入类型不同(List<??>),但生成的对象的类型是相同的(List).

    3,声明的对象的泛型不同,要传入统一的接口时,接口定义传入参数需要使用泛型通配符.

    例如:

    package fx;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class GenericTest2 {
        public static void getData(List<?> list){//不固定泛型的参数
            System.out.println("Data:"+list.getClass());//输出结果不管是什么泛型,都是相同的类型:Data:class java.util.ArrayList
        }
        public static void getDataStr(List<String> list){//固定泛型的参数
            System.out.println("Data:"+list.getClass());
        }
        public static void main(String[] args) {
            List<String> name = new ArrayList<String>();
            List<Integer> age = new ArrayList<Integer>();
            GenericTest2.getDataStr(name);//正常
            GenericTest2.getDataStr(age);//编译检查报错
            GenericTest2.getData(name);//正常
            GenericTest2.getData(age);//正常
        }
    }

    关于通配符:

    上限: List<? extends Number> 表示Number以及子类

    下限: List<? super Number> 表示Number以及父类

    ?: List<?> 表示任意 

  • 相关阅读:
    SpringBoot 部署 docker 打包镜像
    Android上dip、dp、px、sp等单位说明(转)
    mac下svn问题——“.a”(静态库)文件无法上传解决
    Mac OS X 访问 Windows 共享文件夹
    svn不能添加.a文件的解决方法
    UIView的剖析(转)
    mac 下真机调试 android 手机
    IOS-synthesize和dynamic的异同(转)
    IOS学习笔记之关键词@dynamic
    【转】APNs消息推送完整讲解
  • 原文地址:https://www.cnblogs.com/qinggege/p/5213229.html
Copyright © 2011-2022 走看看