美文网首页
Java基础之泛型

Java基础之泛型

作者: felixfeijs | 来源:发表于2020-07-22 17:07 被阅读0次

Java基础之泛型

泛型基本介绍

  1. 简单介绍
    • 在jdk1.6之前,还没有使用到泛型,Java类型分为原始类型、复杂类型,其中复杂类型分为数组和类。要在类中的方法支持多个数据类型就需要进行方法重载,在引入泛型侯可解决此问题(多态).
    • 引入泛型主要为了解决两个方面的问题
      1. 集合类型元素在运行期出现类型转换异常,引入泛型增加编译时类型的检查.
      2. 解决开发时重复代码的编写,能够复用方法.
  2. 泛型中T、E、K、V、?的含义
    • E - Element (在集合中使用,因为集合中存放的是元素),E是对各方法中的泛型类型进行限制,以保证同一个对象调用不同的方法时,操作的类型必定是相同的。E可以用其它任意字母代替
    • T - Type(Java 类),T代表在调用时的指定类型。会进行类型推断
    • K - Key(键)
    • V - Value(值)
    • N - Number(数值类型)
    • ? - 表示不确定的java类型,是类型通配符,代表所有类型。?不会进行类型推断

泛型的使用

  1. 使用泛型指定入参类型
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        // list.add(213); 使用其他类型会编辑报错
    }
    
  2. 使用泛型类
    1. 定义泛型类
    public class User<T> {
    
    public T getContent() {
        System.out.println("Object的类型为=" + this.content.getClass().getName());
        return content;
    }
    
    public void setContent(T content) {
        this.content = content;
    }
    
    public User(T content) {
        this.content = content;
    }
    
    private T content;
    
    }
    
    1. 进行构造方法调用
        public static void main(String[] args) {
        User<String> userStr = new User<String>("哈哈");
        System.out.println("输入的内容="+userStr.getContent());
        User<Integer> userInt = new User<Integer>(123);
        System.out.println("输入的内容="+userInt.getContent());
    }
    
    • 控制台结果
    Object的类型为=java.lang.String
    输入的内容=哈哈
    Object的类型为=java.lang.Integer
    输入的内容=123
    
  3. 限制泛型为继承某个类的子类
    1. 编写用户类
    public class User {
    
    private String name;
    private Integer age;
    private String sex;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public Integer getAge() {
        return age;
    }
    
    public void setAge(Integer age) {
        this.age = age;
    }
    
    public String getSex() {
        return sex;
    }
    
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    public void say() {
    
    }
    }
    
    1. 编写Boos类
    public class Boos extends User {
    
    @Override
    public void say() {
        System.out.println("姓名:" + this.getName() + "、性别:" + this.getSex() + "年龄:" + this.getAge() + "职位:领导");
    }
    }
    
    1. 编写Personnel类
    public class Personnel extends User {
    
    @Override
    public void say() {
        System.out.println("姓名:"+this.getName()+"、性别:"+this.getSex()+"年龄:"+this.getAge()+"职位:员工");
    }
    }
    
    1. 编写泛型类
    public class Demo<T extends User> {
    public T getContent() {
        return content;
    }
    
    public void setContent(T content) {
        this.content = content;
    }
    
    private T content;
    
    public Demo(T content){
        this.content = content;
        System.out.println("输入的类型是="+content.getClass().getName());
    }
    }
    
    1. 编写测试类
        public static void main(String[] args) {
        Boos boos = new Boos();
        boos.setName("范先生");
        boos.setAge(20);
        boos.setSex("男");
        boos.say();
        Demo<Boos> boosDemo = new Demo<>(boos);
        System.out.println("boosDemo的内容="+boosDemo.getContent());
    
        Personnel personnel = new Personnel();
        personnel.setName("赵先生");
        personnel.setAge(21);
        personnel.setSex("男");
        personnel.say();
        Demo<Personnel> personnelDemo = new Demo<>(personnel);
        System.out.println("personnelDemo的内容="+personnelDemo.getContent());
    }
    
    • 控制台结果
    姓名:范先生、性别:男年龄:20职位:领导
    输入的类型是=com.example.demo.test.Boos
    boosDemo的内容=com.example.demo.test.Boos@5ca881b5
    姓名:赵先生、性别:男年龄:21职位:员工
    输入的类型是=com.example.demo.test.Personnel
    personnelDemo的内容=com.example.demo.test.Personnel@24d46ca6
    
  4. 使用通配符泛型
    1. 创建Boos类
    public class Boos {
    
    public Boos(String name, Integer age, String sex) {
        System.out.println("姓名:" + name + "、性别:" + sex + "年龄:" + age + "职位:领导");
    }
    }
    
    1. 创建Personnel类
    public class Personnel{
    
    public Personnel(String name,Integer age,String sex){
        System.out.println("姓名:" + name + "、性别:" + sex + "年龄:" + age + "职位:领导");
    }
    }
    
    1. 进行测试
        public static void main(String[] args) {
        Demo<Integer> integerDemo = new Demo<>(123);
        TestTwo.take(integerDemo);
        Demo<Boos> boosDemo = new Demo<>(new Boos("张先生",23,"男"));
        TestTwo.take(boosDemo);
        Demo<Personnel> personnelDemo = new Demo<>(new Personnel("吴女士",24,"女"));
        TestTwo.take(personnelDemo);
    
    }
    
    • 控制台结果
    输入的类型是=java.lang.Integer
    输出的内容是=123
    姓名:张先生、性别:男年龄:23职位:领导
    输入的类型是=com.example.demo.test.Boos
    输出的内容是=com.example.demo.test.Boos@5ca881b5
    姓名:吴女士、性别:女年龄:24职位:领导
    输入的类型是=com.example.demo.test.Personnel
    输出的内容是=com.example.demo.test.Personnel@24d46ca6
    
  5. 使用泛型方法
    1. 创建方法并进行方法调用
        public static <T> void print(T content) {
        System.out.println("输出的内容是=" + content);
        System.out.println("输出的类型是=" + content.getClass().getName());
    }
    
    public static void main(String[] args) {
        TestTwo.print(123);
        TestTwo.print("哈哈");
        TestTwo.print(236.63);
        TestTwo.print(1.0f);
        TestTwo.print(new Object());
    }
    
    • 控制台结果
    输出的内容是=123
    输出的类型是=java.lang.Integer
    输出的内容是=哈哈
    输出的类型是=java.lang.String
    输出的内容是=236.63
    输出的类型是=java.lang.Double
    输出的内容是=1.0
    输出的类型是=java.lang.Float
    输出的内容是=java.lang.Object@5ca881b5
    输出的类型是=java.lang.Object
    

泛型加深理解

  1. 泛型语法相当于一个语法糖,通过编译器编译后生成的.class文件完全相同.

相关文章

  • Java基础之泛型

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

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

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

  • Java 泛型

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

  • Java泛型教程

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

  • Java基础之泛型

    转载: https://blog.csdn.net/s10461/article/details/53941091...

  • java基础之泛型

    Java 泛型,你了解类型擦除吗? 1. 函数上的泛型定义 当函数中使用了一个不明确的数据类型,那么在函数上就可...

  • Java 基础 之 泛型

    一:什么是泛型 泛型在我们的代码中使用非常广泛的一部分知识,今天就系统的把泛型总结一下,并记录自己的学习历程...

  • Java基础之<泛型>

    泛型类和泛型方法 泛型是Java语言中实现程序多态的一种重要方法,泛型多用于底层代码中,以此来保证代码的通用型。今...

  • Java基础之泛型

    一些术语 参数化类的类型(parameterized type):含有类型参数的类型,例如List 原生态类型(r...

  • JAVA基础之泛型

    1、为什么引入泛型 bug是编程的一部分,我们只能尽自己最大的能力减少出现bug的几率,但是谁也不能保证自己写出的...

网友评论

      本文标题:Java基础之泛型

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