java泛型总结

简介: Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
🏠个人主页: 黑洞晓威
🧑个人简介:大家好,我是晓威,一名普普通通的大二在校生,希望在CSDN中与大家一起成长。

🎁如果你也在正在学习Java,欢迎各位大佬来到我的博客查漏补缺呀,如果有哪里写的不对的地方也欢迎诸佬指正啊。

一、泛型的概念

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

二、泛型的好处

(1)保证了类型的安全性。

(2) 消除强制转换

(3)避免了不必要的装箱、拆箱操作,提高程序的性能

三、泛型的使用

类的内部结构可以使用泛型

public class Student <T>{
    private String name;
    private T age;//age的数据类型为泛型T

    public Student() {
    }

    public Student(String name, T age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public T getAge() {
        return age;
    }

    public void setAge(T age) {
        this.age = age;
    }
}
如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型

建议:实例化时指明类的泛型

public static void main(String[] args) {
    Student student = new Student("Mike",17);
    //此时构造器中的age类型为Object
    
    Student student1 = new Student<Integer>("tom",18);
    //此时构造器中的age必须为Integer
}

1、泛型的子类

  1. 子类继承的父类泛型已经确定
public class son extends Student<Integer>{//子类继承的父类泛型已经确定
     public son() {
    }

    public son(String mary, String i) {
    }
}
public static void main(String[] args) {
    son son = new son();
    son.setAge(19);//Age为int型
}
  1. 子类继承的父类泛型没有确定
public class son<T> extends Student<T>{//此时son<T>:是泛型

}
public static void main(String[] args) {
    son<Integer> son = new son<>();//第一个泛型确定后后面泛型类型可省略
    son.setAge(18);//此时age也是int型
}

2、泛型的注意点

  1. 泛型可能有多个参数,此时应该将多个参数一起放在尖括号内。比如:<E1,E2,E3>
  2. 泛型要用则一路都用,要不用就一路都不用
  3. 泛型的指定中不能使用基本数据类型,可以使用包装类替换
  4. 异常类不能是泛型

3、泛型中子类与父类之间的继承关系

在这里插入图片描述
在这里插入图片描述

4、泛型方法

  • 在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系
  • 泛型方法所属的类是不是泛型类不影响泛型方法
  • 泛型方法可以声明为静态的。因为泛型参数是在调用的方法时确定的。并非在实例化时确定的。
public static <E> List<E> copyformarray(E[] arr){
    List<E> list = new ArrayList<>();
    for(E e : arr){
        list.add(e);
    }
    return list;
}
🎉文章到这里就结束了,感谢诸佬的阅读。🎉
💕欢迎诸佬对文章加以指正,也望诸佬不吝点赞、评论、收藏加关注呀😘
相关文章
|
6天前
|
存储 Java 编译器
深入理解 Java 泛型和类型擦除
【4月更文挑战第19天】Java泛型是参数化类型,增强安全性与可读性,但存在类型擦除机制。类型擦除保证与旧版本兼容,优化性能,但也导致运行时无法访问泛型信息、类型匹配问题及数组创建限制。为应对这些问题,可使用Object类、instanceof运算符,或借助Guava库的TypeToken获取运行时类型信息。
|
6天前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
6天前
|
安全 Java 程序员
Java 泛型
Java 泛型
16 0
|
1天前
|
安全 Java 编译器
Java一分钟之——泛型方法与泛型接口
【5月更文挑战第20天】Java泛型提供编译时类型安全检查,提升代码重用和灵活性。本文探讨泛型方法和接口的核心概念、常见问题和避免策略。泛型方法允许处理多种数据类型,而泛型接口需在实现时指定具体类型。注意类型擦除、误用原始类型和泛型边界的理解。通过明确指定类型参数、利用通配符和理解类型擦除来避免问题。泛型接口要精确指定类型参数,适度约束,利用默认方法。示例代码展示了泛型方法和接口的使用。
26 1
Java一分钟之——泛型方法与泛型接口
|
1天前
|
存储 安全 Java
Java一分钟之-泛型擦除与类型安全
【5月更文挑战第20天】Java泛型采用类型擦除机制,在编译期间移除泛型信息,但在编译阶段提供类型安全检查。尽管需要类型转换且可能产生警告,但可以通过特定语法避免。使用泛型时应注意自动装箱拆箱影响性能,无界通配符仅允许读取。理解这些特性有助于编写更安全的代码。
27 4
|
2天前
|
安全 Java API
Java一分钟之-泛型通配符:上限与下限野蛮类型
【5月更文挑战第19天】Java中的泛型通配符用于增强方法参数和变量的灵活性。通配符上限`? extends T`允许读取`T`或其子类型的列表,而通配符下限`? super T`允许向`T`或其父类型的列表写入。野蛮类型不指定泛型,可能引发运行时异常。注意,不能创建泛型通配符实例,也无法同时指定上下限。理解和适度使用这些概念能提升代码的通用性和安全性,但也需兼顾可读性。
25 3
|
6天前
|
安全 Java 编译器
java泛型浅谈
java泛型浅谈
7 1
|
6天前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
6天前
|
Java
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识
【5月更文挑战第2天】JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识。入坑JAVA因它的面向对象特性、平台无关性、强大的标准库和活跃的社区支持。
42 2
|
6天前
|
安全 Java 编译器
【JAVA】泛型和Object的区别
【JAVA】泛型和Object的区别