java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习

news2024/11/24 17:30:20

文章目录

  • 泛型的深入
  • 泛型还可以在很多地方进行定义
    • 泛型类
    • 泛型方法
    • 泛型接口
  • 泛型的继承和通配符
  • 泛型类练习
  • 总结

泛型的深入

在这里插入图片描述

public static void main(String[] args) {

        //在没有泛型的时候怎么存储数据
        ArrayList list=new ArrayList();


        list.add(1);
        list.add("abc");


        //遍历集合
        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            Object o = iterator.next();
            //多态的弊端 不能访问子类特有的功能
            //o.length()就会报错

            //由此得出如果没有给集合限定类型那么所有类型都是object类型
            
            System.out.println(o);
            //打印结果1
            //abc
        }


    }

结论:如果我们给定集合的类型 那么所有数据类型都是object
此时可以往集合添加任何的数据类型
带来一个坏处我们获取数据的时候无法用她的特有行为
所以推出泛型
在这里插入图片描述
以上为泛型的好处

在这里插入图片描述
以上为泛型的细节

泛型还可以在很多地方进行定义

在这里插入图片描述

泛型类

在这里插入图片描述

思考:并且自己写出一个泛型类

public class myArrayList <E>{

    Object []obj=new Object[10];

    int size;//表达长度  你现在存了几个元素


    public boolean add(E e){
        obj[size]=e;//相当于现在要把元素添加到数组
        size++;
        return true;//表示添加成功
    }


    public E get(int index){

        return (E) obj[index];
    }



    //重写toString 要求返回对象属性值1
    @Override
    public String toString() {
        return Arrays.toString(obj);
    }
}

在这里插入图片描述

泛型方法

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

下面是应用场景

public class ListUtil {
    //这是一个工具类
    //所以要私有化其构造方法(不让外界创建他的对象 )
    private  ListUtil(){}
    //这个工具类的作用是让集合可以添加元素
    //参数1是集合  参数二是参数


    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 class ListUtil {
    //这是一个工具类
    //所以要私有化其构造方法(不让外界创建他的对象 )
    private  ListUtil(){}
    //这个工具类的作用是让集合可以添加元素
    //参数1是集合  参数二是参数


    public static <E>void addall(ArrayList<E>list,E...e){
        //他的底层是一个数组
        //可以用普通for遍历也可以用增强for
        for (E election : e) {
            list.add(election);
        }
    }


}

在这里插入图片描述

泛型接口

在这里插入图片描述

在这里插入图片描述
1:实现类给出具体的类型.在实现的地方定义泛型类型表示就只能这个类型了


在这里插入图片描述

以上为实现类也不明确类型

泛型的继承和通配符

泛型不具备继承性,但是数据具备继承性.

import java.util.ArrayList;

public class GenericsDemo {
    public static void main(String[] args) {

        //泛型不具备继承性 但是数据具备继承性

        ArrayList<ye>list1 =new ArrayList<ye>();
        ArrayList<fu>list2=new ArrayList<fu>();
        ArrayList<zi>list3 =new ArrayList<zi>();

        method(list1);
        method(list2);
        method(list3);
        //这个就是泛型不具备继承性  list2 3 报错了 因为他俩是继承来的

        list1.add(new ye());
        list1.add(new fu());
        list1.add(new zi());
        //这个是数据具备继承性
    }
    public static  void method(ArrayList<ye> list){

    }
}
class ye{

}
class fu extends ye{

}
class zi extends fu{

}

在这里插入图片描述


public class GenericsDemoTongpei {
    public static void main(String[] args) {

        //泛型不具备继承性 但是数据具备继承性

        ArrayList<ye> list1 =new ArrayList<ye>();
        ArrayList<fu>list2=new ArrayList<fu>();
        ArrayList<zi>list3 =new ArrayList<zi>();

        method(list1);
        method(list2);
        method(list3);
        
    }
    //这种方法不要严谨 因为它可以接收所有类
    //但是如果我只想限定的只接受部分类呢
    //这时候就用到了通配符
    // ? extend E表示可传递e或者e的所有的子类类型
    // ? super E表示传递e或者e的所有父类类型
    public static<E>  void method(ArrayList<E> list){

    }
}
class ye{

}
class fu extends ye{

}
class zi extends fu{

}

这种方法不要严谨 因为它可以接收所有类
但是如果我只想限定的只接受部分类呢
这时候就用到了通配符
? extend E表示可传递e或者e的所有的子类类型
? super E表示传递e或者e的所有父类类型

在这里插入图片描述

泛型类练习

在这里插入图片描述

    public static void main(String[] args) {


        ArrayList<BosiCat>list1=new ArrayList<>();
        ArrayList<LihuaCat>list2=new ArrayList<>();
        ArrayList<TaidiDog>list3=new ArrayList<>();
        ArrayList<huskey>list4=new ArrayList<>();


        keepPet(list1);
        keepPet(list2);
        //要求1



        keepPet2(list3);
        keepPet2(list4);
        //要求2

        keepPet3(list1);
        keepPet3(list3);
        //要求3


    }
    //要求1:该方法能养所有品种的猫但不能养狗
    public static void keepPet(ArrayList<? extends Cat>list){
        
    }


    //要求2:该方法能养所有品种的狗但不能养猫
    public static void keepPet2(ArrayList<? extends Dog>list){

    }


    //要求3:该方法能养所有动物但是不能是其他类型
    public static void keepPet3(ArrayList<? extends animal>list){

    }

总结

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1178344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 用字符串比较函数cmp来做一个门禁:账号密码是否匹配 (干货满满)

#include<stdio.h> #include<string.h> void fun04() {for (int i 0; i < 3; i){char *str01 "hello";char uname[100] ;printf("请输入账号");scanf("%s",uname);char *str02 "123456";char pword[100];printf(&qu…

数字化转型:云表低代码开发助力制造业腾飞

数字化转型已成为制造业不可避免的趋势。为了应对市场快速变化、提高运营效率以及降低成本&#xff0c;制造业企业积极追求更加智能化、敏捷的生产方式。在这个转型过程中&#xff0c;低代码技术作为一种强大的工具&#xff0c;正逐渐崭露头角&#xff0c;有望加速制造业的数字…

QGC 中添加海康威视摄像头记录(Qt For Android 使用 JNI 进行JAVA 与 C++ 的通讯)

文章目录 1. 配置海康威视 SDK 下载库文件移植工程文件添加动态库&#xff08;.so&#xff09;Android xml 配置添加 java 文件 2. JavaQGCActivity.javaHkwsManager.java 3. C头文件添加&#xff1a;C 中调用 Java 静态函数&#xff08;hcnNetSDKInit&#xff09;JNI 传入规则…

【电路笔记】-串联RLC电路分析

串联RLC电路分析 文章目录 串联RLC电路分析1、概述2、瞬态响应3、AC响应4、RCL和CLR配置5、结论 电阻器 、电感器 (L) 和电容器 © 是电子器件中的三个基本无源元件。 它们的属性和行为已在交流电阻、交流电感和交流电容文章中详细介绍。 在本文中&#xff0c;我们将重点讨…

二蛋赠书七期:《云原生数据中台:架构、方法论与实践》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

基于北方苍鹰算法的无人机航迹规划-附代码

基于北方苍鹰算法的无人机航迹规划 文章目录 基于北方苍鹰算法的无人机航迹规划1.北方苍鹰搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用北方苍鹰算法来优化无人机航迹规划。 …

Qt QTableView排序

1.简介 在开发过程中&#xff0c;我们需要通过点击表头来对QTableView或QTreeView等一系列高级视图进行排序操作&#xff0c;以下是进行排序的步骤。 步骤&#xff1a; 首先创建了一个QStandardItemModel对象或者继承QAbstractTableModel类作为数据模型&#xff0c;并设置了…

如何获取HuggingFace的Access Token;如何获取HuggingFace的API Key

Access Token通过编程方式向 HuggingFace 验证您的身份&#xff0c;允许应用程序执行由授予的权限范围&#xff08;读取、写入或管理&#xff09;指定的特定操作。您可以通过以下步骤获取&#xff1a; 1.首先&#xff0c;你需要注册一个 Hugging Face 账号。如果你已经有了账号…

Android修行手册 - 实现POI上万行的大数据量Excel读写操作,解决内存溢出

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

web前端JS基础------制作一个获取验证码

1&#xff0c;需要一个定时器&#xff0c;和一个button&#xff0c;通过点击事件启动获取验证码 2&#xff0c;参考代码如下 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><…

Linux中for循环

for do done 复习知识点&#xff1a;cut命令&#xff0c;id命令&#xff0c;finger命令&#xff0c;for循环 程序如上&#xff0c;-d 接分隔符&#xff0c;-f后的数字表示分隔后的列 从结果可以看出&#xff0c;系统上没有finger这个命令&#xff0c;后面会学到yum安装命令&a…

上手SQL语句调优必须了解的内容——Explain

在做性能测试时&#xff0c;资深的性能测试工程师&#xff0c;都会帮助研发同学优化sql语句&#xff0c;听起来很高深&#xff0c;但是具体操作是比较容易的&#xff0c;使用expain命令就可以了&#xff01;本文我会用最简单有效的方式带大家掌握expain的使用方法&#xff01; …

JVM虚拟机:垃圾回收器之Serial(年轻代)

本文重点 本文将介绍年轻代的Serial回收器,它最主要的特征就是串行化的回收器。 运行方式 Serial是一个单线程的收集器,在进行垃圾收集的时候,必须暂停其它所有的工作线程(java程序找一个安全点safe point然后才停止执行,进行等待)直到垃圾回收结束,下的运行状态图如…

迅为iTOP-i.MX8M开发板使用 make 工具

make 工具是编译辅助工具&#xff0c;用来解决使用命令编译工程非常繁琐的问题。 调用这个命令工具&#xff1a;我们在 windows 上编程使用 ide &#xff0c;我们有图形界面&#xff0c;有相应的按钮&#xff0c;比如说 build 或者 run 来编译。其实 make 这个编译辅助工具使…

Dajngo学习笔记(3)

电话号码管理 查看功能 class PrettyNum(models.Model):mobilemodels.CharField(verbose_name"电话号",max_length11)pricemodels.IntegerField(verbose_name"价格")level_choice((1,"一级"),(2,"二级"),(3,"三级"))level…

RISC-V处理器设计(四)—— Verilog 代码设计

一、前言 从6月底刚开始接触 risc-v 架构&#xff0c;到现在完成了一个 risc-v cpu 的设计&#xff0c;并且成功移植了 rt-thread nano 到本 cpu 上运行&#xff0c;中间经过了 4个多月的时间&#xff0c;遇到了数不清的问题&#xff0c;也想过放弃&#xff0c;但好在最后还是…

美国阿贡国家实验室发布快速自动扫描套件 FAST,助力显微技术「快速阅读」成为可能

「我高兴地在北京市的天安门广场上看红色的国旗升起」 快速阅读一下这个句子&#xff0c;大家可能会发现&#xff0c;只需「我在天安门广场看升旗」几个字&#xff0c;就能概述我们需要的信息&#xff0c;也就是说&#xff0c;无需逐字逐句地阅读&#xff0c;抓住重点即可破译…

【flutter no devices】

1.在环境变量增加 ANDROID_HOME 值为&#xff1a;C:\Users\Administrator\AppData\Local\Android\Sdk &#xff08;Android sdk 位置) 2 环境变量的path里面增加2个值&#xff1a; %ANDROID_HOME%\platform-tools %ANDROID_HOME%\tools 3 打开cmd&#xff0c;或者在Android st…

嵌入式Linux和stm32区别? 之间有什么关系吗?

嵌入式Linux和stm32区别? 之间有什么关系吗&#xff1f; 主要体现在以下几个方面&#xff1a; 1.硬件资源不同 单片机一般是芯片内部集成flash、ram&#xff0c;ARM一般是CPU&#xff0c;配合外部的flash、ram、sd卡存储器使用。最近很多小伙伴找我&#xff0c;说想要一些嵌…

【滑动窗口】篮里到底能装 “几个水果” 呢?

Problem: 904. 水果成篮 文章目录 题目分析算法原理分析暴力枚举 哈希表滑动窗口优化数组再度优化 复杂度Code 题目分析 首先我们来分析一下本题的思路 首先我们通过题目的描述来理解一下其要表达的含义&#xff0c;题目给到我们一个fruit数组&#xff0c;里面存放的是每棵树上…