美文网首页
Java基础-泛型学习指南

Java基础-泛型学习指南

作者: JackDaddy | 来源:发表于2020-04-25 20:44 被阅读0次

1.什么是泛型

Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制。
该机制允许程序员在编译时检测到非法的类型,泛型的本质是参数类型,也就是说所操作的数据类型被指定为一个参数,泛型不存在于JVM虚拟机

2.为什么使用泛型

1,减少因类型问题引发的运行时的异常,将在运行时才能发现的异常提前到编译期
2,增强代码的复用性,避免类型转换

3.泛型分类

1) 泛型类
    //泛型类
   class GenerClass<T> {
        T name;

        public T getName(T name) {
            this.name = name;
            return name;
        }
    }
2) 泛型接口
   //泛型接口
    interface GenerInterface<T> {
        T getAddress(T t);
    }
3) 泛型方法
    //泛型方法
    public <T> void gengerMethod(T name) {

    }

4.泛型继承/实现的不同

1)继承泛型类(指定泛型类型)
    //继承泛型类(指定泛型类型)
   class User extends GenerClass<String> {

        @Override
        public String getName(String name) {
            return super.getName(name);
        }
    }
2)继承泛型类(不指定泛型)
    //继承泛型类(不指定泛型)
     class UserNoGener<T> extends GenerClass<T> {
        @Override
        public T getName(T name) {
            return super.getName(name);
        }
    }
3)实现泛型接口(指定泛型类型)
class UserInterface implements GenerInterface<String> {

        @Override
        public String getAddress(String s) {
            return s;
        }
    }
4)实现泛型接口(不指定泛型类型)
class UserInterfaceNoGener<T> implements GenerInterface<T> {

        @Override
        public T getAddress(T t) {
            return t;
        }
    }

5.通配符限制

1) 单一限制
     //单一限制
    class UserWithSingle<T extends GenerClass> {

    }
2) 多种限制
//多种限制(类->单继承,接口-多实现)
    class UserWithMore<T extends TestGenerClass & testInterface_1 & testInterface_2 & testInterface_3> {

    }

小结

  1. 多种限制的时候只能单继承多实现,指的是类只能单继承,接口可以多实现
  2. 连接时要用 ' & ' 连接

6.通配符分类

1) 上限通配符-指定泛型可接受的最顶级父类,可读不可写
上限通配符
辅助理解
  1. 可读:获取的时候知道了最顶级的父类是什么,获取之后可以转换成所需要的类型
  2. 不可写:写入的时候需要指定具体类型,由于不知道具体类型因此不可写
2)下限通配符-指定泛型可接受的最基础类型,可写不可读
下限通配符
3)非限定通配符-List<?>

List<Object>和List<?>的不同:差在NULL处理,
List<Object>:不支持null入表
List<?>:接受一个null入表

7.泛型的限制

1) 引用传递问题-泛型类中(接口)间无关联
泛型类中(接口)间无关联
2) 数组中无法使用泛型
3) 在泛型中的必须使用基本类型的包装类
    //泛型里只能使用基本类型的包装类
    GenerClass<Integer> generInter = new GenerClass<>();
4)泛型擦除
  1. 无限制时:将泛型替换为Object
  2. 有限制时:将泛型替换为第一受限类型
  3. 编译一个扩展参数化类的类,
    或一个实现了参数化接口的接口时,编译器有可能因此要创建一个合成方法,名为桥方法。它是类型擦除过程中的一部分
    生成桥方法是为了在扩展泛型时保持多态性

Java中List<Object>和原始类型List之间的区别?

  1. 在编译时编译器不会对原始类型进行类型安全检查,却会对带参数的类型进行检查,通过使用Object作为类型,可以告知编译器该方法可以接受任何类型的对象,比如String或Integer。
  2. 可以把任何带参数的泛型类型传递给接受原始类型List的方法,但却不能把List<String>传递给接受List<Object>的方法,因为会产生编译错误。
    List<Object>和List<?>之间的区别?
    List<Object>和List<?>之间的区别

以上就是对泛型的一些小总结,希望对你有所帮助

相关文章

  • Java基础-泛型学习指南

    1.什么是泛型 Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制。该...

  • Java 泛型

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 为什么会有泛型? 泛型类 泛型方法 泛...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • Java基础之泛型

    Java基础之泛型 泛型基本介绍 简单介绍在jdk1.6之前,还没有使用到泛型,Java类型分为原始类型、复杂类型...

  • spring 泛型处理

    java 泛型基础 泛型类型:泛型类型是在类型上参数化的泛型类或接口 泛型使用场景编译时前类型检查。定义为 Col...

  • Java泛型基础

    Java泛型基础 1. 认识泛型 泛型是在JDK1.5之后增加的新功能. 泛型可以解决数据的安全性问题, 主要的原...

  • 一文带你认识Java泛型基础

    Java泛型基础 1. 认识泛型 泛型是在JDK1.5之后增加的新功能. 泛型可以解决数据的安全性问题, 主要的原...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • Java基础(一)

    Java要点1 JAVA基础 1.对抽象、继承、多态的理解 2.泛型的作用及使用场景 1.Java泛型是JDK1....

  • 详解Java泛型之3——十分钟理解泛型擦除

    前面我们介绍了泛型以及通配符的基础概念,可以参考文章: 详解Java泛型之1——入门泛型必懂的知识点[https:...

网友评论

      本文标题:Java基础-泛型学习指南

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