泛型的讲解(泛型类、泛型方法、泛型接口)

目录

泛型的介绍

引入

泛型的多个定义方式

泛型类

泛型方法

泛型接口


泛型的介绍

​ 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制

  • 泛型的好处

    1. 把运行时期的问题提前到了编译期间

    2. 避免了强制类型转换

  • 泛型的定义格式

    • <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: <E> <T>

    • <类型1,类型2...>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V>

引入

当集合中什么都不写的时候,就可以添加任意的类型

java 复制代码
public class GenericsDemo1 {
    public static void main(String[] args) {
        //没有泛型的时候,集合如何存储数据
        //结论:
        //如果我们没有给集合指定类型,默认认为所有的数据类型都是Object类型
        //此时可以往集合添加任意的数据类型。
        //带来一个坏处:我们在获取数据的时候,无法使用他的特有行为。

        //此时推出了泛型,可以在添加数据的时候就把类型进行统一。
        //而且我们在获取数据的时候,也省的强转了,非常的方便。

        //1.创建集合的对象
        ArrayList<String> list = new ArrayList<>();

        //2.添加数据
        //list.add(123);
        list.add("aaa");
        //list.add(new Student("zhangsan",123));


        //3.遍历集合获取里面的每一个元素
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String str = it.next();
            //多态的弊端是不能访问子类的特有功能,所以就无法调用String里面的方法,比如说length()
            //obj.length();
            //str.length();
            System.out.println(str);
        }


    }
}

泛型的多个定义方式

泛型类

当我在编写一个类的时候,如果不确定类型,那么这个类就可以定义为泛型类。

java 复制代码
public class MyArrayList<E> {

    Object[] obj = new Object[10];
    int size;

    /*
    E : 表示是不确定的类型。该类型在类名后面已经定义过了。
    e:形参的名字,变量名
    * */
    public boolean add(E e){
        obj[size] = e;
        size++;
        return true;
    }


    public E get(int index){
        return (E)obj[index];
    }


    @Override
    public String toString() {
        return Arrays.toString(obj);
    }
}
java 复制代码
public class GenericsDemo2 {
    public static void main(String[] args) {
       /* MyArrayList<String> list = new MyArrayList<>();

        list.add("aaa");
        list.add("bbb");
        list.add("ccc");


        System.out.println(list);*/



        MyArrayList<Integer> list2 = new MyArrayList<>();
        list2.add(123);
        list2.add(456);
        list2.add(789);


        int i = list2.get(0);
        System.out.println(i);


        System.out.println(list2);
    }
}

泛型方法

当泛型只在一个方法中用到的时候,就没必要写成泛型方法了,写成泛型类就可以了,泛型写在修饰符的后面

java 复制代码
package itheima.a04mygenerics;

import java.util.ArrayList;

public class ListUtil {
    private ListUtil(){}

    //类中定义一个静态方法addAll,用来添加多个集合的元素。


    /*
    *   参数一:集合
    *   参数二~最后:要添加的元素
    *
    * */
    public static<E> void addAll(ArrayList<E> list, E e1,E e2,E e3,E e4){
        list.add(e1);
        list.add(e2);
        list.add(e3);
        list.add(e4);
    }

/*    public static<E> void addAll2(ArrayList<E> list, E...e){
        for (E element : e) {
            list.add(element);
        }
    }*/


    public void show(){
        System.out.println("尼古拉斯·纯情·天真·暖男·阿玮");
    }
}
java 复制代码
package itheima.a04mygenerics;


import java.util.ArrayList;

/*
    定义一个工具类:ListUtil
    类中定义一个静态方法addAll,用来添加多个集合的元素。
*/
public class GenericsDemo3 {
    public static void main(String[] args) {

        ArrayList<String> list1 = new ArrayList<>();
        ListUtil.addAll(list1, "aaa", "bbb", "ccc", "ddd");
        System.out.println(list1);


        ArrayList<Integer> list2 = new ArrayList<>();
        ListUtil.addAll(list2,1,2,3,4);
        System.out.println(list2);

    }
}

泛型接口

相关推荐
丙氨酸長鏈29 分钟前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#
Nontee31 分钟前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
我是唐青枫33 分钟前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言
晨曦中的暮雨1 小时前
Virtual Thread 优化 Spring AI 阻塞式 LLM I/O:对照压测报告
java·并发·个人项目
AKA__Zas2 小时前
芝士算法(前缀和2.0)
java·数据结构·算法·leetcode·哈希算法·学习方法
caishenzhibiao2 小时前
降雨带波段点差 同花顺期货通指标
java·c语言·c#
七夜zippoe2 小时前
OpenClaw Prompt 工程:从角色设定到 Skill 封装的 Agent 输出质量方法论
java·服务器·prompt·openclaw·skill封装
rosmis3 小时前
agent各指标定义
android·java·开发语言
mifengxing3 小时前
Java 集合进阶(一)
java·开发语言·数据结构·复习笔记
令狐前生3 小时前
Intellij IDEA 2025 破解安装
java·ide·intellij-idea