当Java遇上泛型:类型安全的魔法之旅

2024年 3月 6日 86.9k 0

哈喽,大家好,我是了不起。

泛型是jdk1.5之后出现的新特性,其本质是参数化类型(type parameters),通过参数化类型让代码可以应用于多种类型。

泛型是什么

泛型,即“参数化类型”,就是将类型由原来的具体类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

常用的泛型变量

  • Element(E):元素,多用于java框架集合
  • Key(K) :关键字
  • Number(N) : 数字
  • Type(T) : 类型
  • Value(V) : 值

如果没有泛型会怎么样?

public class Demo {

    public static int add(int a ,int b){
        return a+b;
    }

    public  static  float add(float a,float b){
        return a+b;
    }
    
    public static void main(String[] args) {
        Demo.add(1, 2);
        Demo.add(1f, 2f);
    }
}

如果我们利用泛型,只需要定义一个方法

public class Demo {

    public static  int add(T a, T b) {
        System.out.println(a + "+" + b + "=" + (a.intValue() + b.intValue()));
        return a.intValue() + b.intValue();
    }

    public static void main(String[] args) {
        Demo.add(1, 2);
        Demo.add(1f, 2f);
    }
}

所以泛型的意义在于

  • 适用于多种数据类型执行相同的代码
  • 泛型中的类型在使用时指定,不需要强制转换类型(类型安全,编译器会检查类型)
  • 泛型的使用

    泛型类

    示例:

    public class DemoT {
        private T data;
    
        public T getData(){
            return data;
        }
    
        public void setData(){
            this.data = data;
        }
    }

    案例

    @Data
    public class Person {
        private  String name;
        private int age;
        private A data;
    }
    
    public class Demo {
        public static void main(String[] args) {
            //传入String类型
            DemoT t = new DemoT(); 
            t.setData("泛型");
        }
    }

    泛型接口

    示例:

    public interface IntercaceName {
        T getData();
    }

    实现接口时,可以选择指定泛型类型,也可以选择不指定,如下:

    指定类型:

    public class Interface1 implements IntercaceName{
        private String text;
        @Override
        public String getData() {
            return text;
        }
    }

    不指定类型:

    public class Interface1 implements IntercaceName{
        private T text;
        @Override
        public T getData() {
            return text;
        }
    }

    泛型方法

    示例:

    private static  T 方法名 (T a,T b){}
    
    public class Demo {
        public static void main(String[] args) {
            print("泛型");
        }
        public static  void print(A a){
            System.out.println(a);
        }
    }

    泛型限制类型

    在使用泛型时,可以指定泛型的限定区域

    • 例如:必须是某某类的子类或 某某接口的实现类,格式:

    泛型中的通配符 ?

    //1.  指定了没有限制的泛型类型

    public class Demo {
    public static void main(String[] args) {
    //上届限定
    //不能将一个装着苹果的盘子,看做一个装着水果的盘子
    Plants

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论