美文网首页
java基础之泛型

java基础之泛型

作者: 没有了遇见 | 来源:发表于2022-11-28 12:55 被阅读0次

什么是泛型???

此刻一脸懵逼的我,立即开始了百度.搜到的结果是,泛型的实质就是参数化类型?????,WO CAO (大写的) ,这又是什么鬼,说实话我是懵逼的.'

泛型 :其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法

也就是说,泛型就是将操作的数据类型参数化,这个时候将泛型用在类中是泛型类,用在方法中是泛型方法,用在接口中就是泛型接口

1. 泛型类 泛型方法

package com.wu.demo.fx;

/**
 * 作者:吴奎庆
 * <p>
 * 时间:11/26/22
 * <p>
 * 用途:  泛型类  泛型用<>包裹  可以定义多个泛型  T W 就是泛型类型
 */


public class Person<T,W> {

    T name;

    W age;


    // 泛型方法  普通泛型方法的占位符声明需要再类上边声明   可以声明多个占位符
    public T getName() {
        return name;
    }

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

    public W getAge() {
        return age;
    }

    public void setAge(W age) {
        this.age = age;
    }

    //泛型静态方法, 泛型静态方法中的泛型占位符和 普通方法的占位符没关系
    public static <D> void setSex(D sex){
        System.out.println("性别:"+sex);

    }
     // <N> 是泛型占位符  N 是返回类型  (N sex) 是传递方法 
    public static <N> N getSex(N sex){
        return sex;

    }


    @Override
    public String toString() {
        return "Person{" +
                "name=" + name +
                ", age=" + age +
                '}';
    }
}


2. 泛型接口




/**
 * 作者:吴奎庆
 * <p>
 * 时间:11/26/22
 * <p>
 * 用途: 泛型接口
 */

package com.wu.demo.fx;
public interface Animal<T> {
    public void show(T t);
}



/**
 * 作者:吴奎庆
 * <p>
 * 时间:11/26/22
 * <p>
 * 用途:  泛型接口的实现类 指定泛型的类型
 */

package com.wu.demo.fx;
public class Dog implements Animal<String> {
    @Override
    public void show(String s) {
        System.out.println(s);
    }
}






/**
 * 作者:吴奎庆
 * <p>
 * 时间:11/26/22
 * <p>
 * 用途:  泛型接口的实现类可以不指定泛型的类型  这个时候要声明一个泛型占位符给实现类使用
 */

package com.wu.demo.fx;
public class Cat<T> implements Animal<T> {
    @Override
    public void show(T t) {
        System.out.print(t);
    }

}

//调用
       var dog = Dog();
        dog.show("狗叫")

        var cat = Cat<String>();
        cat.show("猫叫")

3.泛型擦除

泛型只存在java 编译阶段,在运行阶段会全部擦除为Obj,限定类型,这就叫泛型擦除.泛型擦除是为了兼容老版本的代码.

为什么用泛型????

1.使用泛型可以在编译期进行类型检测,尽早发现问题
2.不使用泛型使用Object 会进行频繁的类型转换,消耗性能,减少不必要的类型转换异常
3.增加了代码的扩展性,泛型代替后,可以多种类型使用同一个逻辑
4.节省性能,减少不必要的类型转换

import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * 作者:吴奎庆
 * <p>
 * 时间:11/27/22
 * <p>
 * 用途:  将List中加入不同的 数据
 */


public class TestUnit {

    @Test
    public  void test() throws NoSuchFieldException {

        ArrayList<Integer> list=new ArrayList<>();
        list.add(1);
        Method addFiled= null;
        try {
            //获取方法
            addFiled = list.getClass().getDeclaredMethod("add",Object.class);
            //执行方法
            addFiled.invoke(list,"测试数据");

            System.out.println(list.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }


    }


}

4.通配符

java中的继承关系在泛型中并不适用 所以在泛型中处理继承关系就用到了通配符.

通配符用?表示, ?表示一切类的父类
未指定类型的时候用? 表示

通配符上边界问题 ? extends T (只能读取数据,不能写入数据)
表示:确定了父类 ?是传入的数据 必须是T 以及T的子类
注意:可以读取数据但是不能写入数据 (可以处理让数据可读不可写.)

通配符下边界问题 ? super T
确定了子类,不知道父类的时候用 ?super T
所以下边界的时候只能写入不能读取.(可以处理数据不能读取的情况.)
表示:?是传入的数据 必须是T 以及T的子类

相关文章

  • 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/kuexfdtx.html