泛型知识汇总

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

演示代码:

package exercise;import java.util.Arrays;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];}//没有这个函数,无法看到obj内部的值public String toString() {return Arrays.toString(obj);}
}

测试:

package exercise;public class Test {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("sunshine");list.add("jiuselu");list.add("kukuhsui");System.out.println(list);System.out.println(list.get(0));}
}

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

代码演示:

package exercise;import java.util.ArrayList;public class ListUtil {private ListUtil() {}//泛型要写在修饰符后,public、static都是,写在后面的修饰符后。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 addAll1(ArrayList<E> list,E...e){for (E element : e) {list.add(element);}}}

测试类:

package exercise;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();ListUtil.addAll(list,"sunshine","jiuselu","lulushui","zechao");System.out.println(list);ArrayList<String> list1 = new ArrayList<>();ListUtil.addAll1(list1,"sunshine");System.out.println(list1);}
}

在这里插入图片描述
代码演示:

方法一:

在这里插入图片描述

方法二:

在这里插入图片描述

package exercise;public class Test {public static void main(String[] args) {//泛型接口的两种使用方式//1.实现类给出的具体类型MyArrayList list = new MyArrayList();list.add("sunshine");//2.实现类延续泛型,创建实现类对象时再确定类型MyArrayList1<String> list1 = new MyArrayList1<>();list1.add("jiuselu");}
}

在这里插入图片描述

package exercise;import java.util.ArrayList;public class Demo1 {public static void main(String[] args) {//泛型不具备继承性,但数据具备继承性ArrayList<Ye> list1 = new ArrayList<>();ArrayList<Fu> list2 = new ArrayList<>();ArrayList<Zi> list3 = new ArrayList<>();method1(list1);method1(list2);method1(list3);list1.add(new Ye());list1.add(new Fu());list1.add(new Zi());method2(list1);method2(list2);method2(list3);}/*此时,泛型里面写的是什么类型,那就只能传递什么类型的数据弊端:利用泛型方法有一个小弊端,它可以接受任意类型数据比如 Ye Fu Zi希望:本方法虽然不确定类型,但是我希望洗后只传递Ye Fu Zi此时,我们就可以使用泛型的通配符:?:表示不确定的类型它可以进行类型的限定? extend E :表示可以传递E或者E所有子类类型? super E :表示可以传递E和E的所有父类类型应用场景:1.如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以使用泛型的通配符泛型的通配符:关键点:可以限定类型的范围*/public static void method1(ArrayList<? extends Ye> list) {}public static void method2(ArrayList<? super Zi> list) {}
}class Ye {
}class Fu extends Ye {
}class Zi extends Fu {
}

补充;一个<>中可以写多个类型
在这里插入图片描述


案例
在这里插入图片描述

package exercise;import javax.swing.*;
import javax.swing.plaf.synth.SynthTextAreaUI;
import javax.swing.text.AbstractDocument;
import java.util.ArrayList;
import java.util.List;public class Demo2 {public static void main(String[] args) {ArrayList<ChineseCat> list1 = new ArrayList<>();ArrayList<PersianCat> list2 = new ArrayList<>();ArrayList<HuskyDog> list3 = new ArrayList<>();ArrayList<Teddy> list4 = new ArrayList<>();keepPet1(list1);keepPet1(list2);keepPet2(list3);keepPet2(list4);}public static void keepPet1(ArrayList<? extends Cat> list) {}public static void keepPet2(ArrayList<? extends Dog> list) {}public static void keepPet3(ArrayList<? extends Animal> list) {}
}abstract class Animal {private String name;private int age;public abstract void eat();public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}/*** 获取** @return name*/public String getName() {return name;}/*** 设置** @param name*/public void setName(String name) {this.name = name;}/*** 获取** @return age*/public int getAge() {return age;}/*** 设置** @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Animal{name = " + name + ", age = " + age + "}";}
}abstract class Cat extends Animal {//1.继承抽象类,重写里面所有的方法。//2.本身cat也是一个抽象的,让Cat的子类在重写方法//此时采取第二种处理方案//因为猫的两个子类中的eat的方法体还是不一样的
}class PersianCat extends Cat {public void eat() {System.out.println("一只叫做" + this.getName() + "的" + this.getAge() + "岁的波斯猫,正在吃小饼干。");}
}class ChineseCat extends Cat {public void eat() {System.out.println("一只叫做" + this.getName() + "的" + this.getAge() + "岁的狸花猫,正在吃鱼。");}
}abstract class Dog extends Animal {
}class Teddy extends Dog {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的泰迪,正在吃骨头,边吃边蹭");}
}class HuskyDog extends Dog {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的哈士奇,正在吃骨头,边吃边拆家");}
}

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

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

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

相关文章

现代信号处理12_谱估计的4种方法(CSDN_20240602)

Slepian Spectral Estimator(1950) 做谱估计的目标是尽可能看清楚信号功率谱在某一个频率上的情况&#xff0c;假设我们想了解零频时的分布&#xff0c;最理想的情况是滤波器的传递函数H(ω) 是一个冲激函数&#xff0c;这样就没有旁瓣&#xff0c;也就没有泄漏&#xff1b;其次…

【OpenHarmony】TypeScript 语法 ③ ( 条件语句 | if else 语句 | switch case 语句 )

文章目录 一、条件语句1、if else 语句2、switch case 语句 参考文档 : <HarmonyOS第一课>ArkTS开发语言介绍 一、条件语句 1、if else 语句 TypeScript 中的 if 语句 / if else 语句 用法 , 与 JavaScript 语言中的 if 语句 / if else 语句 语法 基本相同 ; if else 语…

使用Java构建RESTful API:实现灵活、可扩展的Web服务

RESTful API已经成为构建现代Web应用的标准之一&#xff0c;它通过简单的HTTP协议进行通信&#xff0c;提供了一种轻量级、灵活、可扩展的方式来构建和管理Web服务。Java作为一种强大的编程语言&#xff0c;提供了许多框架和库来帮助开发者构建高效的RESTful API。本文将探讨如…

项目质量管理

目录 1.概述 2.三个关键过程 2.1.规划质量管理&#xff08;Plan Quality Management&#xff09; 2.2.管理质量&#xff08;Manage Quality&#xff09; 2.3.控制质量&#xff08;Control Quality&#xff09; 3.应用场景 3.1.十个应用场景 3.2.产品设计与开发 4.小结…

使用PyCharm 开发工具创建工程

一. 简介 前面学习了 安装 python解释器。如何安装python的一种开发工具 PyCharm。 本文来简单学习一下&#xff0c;如何使用 PyCharm 开发工具创建一个简单的 python工程。 二. PyCharm 开发工具创建一个工程 1. 首先&#xff0c;首先打开PyCharm 开发工具。选择 创建一…

Docker部署SiYuan笔记-Unraid

使用unraid的docker部署SiYuan笔记&#xff0c;简单记录 笔记说明 Siyuan笔记是一款基于markdown语法的笔记工具&#xff0c;具有活跃的社区和多设备支持。大部分功能都是免费&#xff0c;源代码开源&#xff0c;支持插件安装&#xff0c;具有很不错的使用体验。 Docker地址&a…

linux---生产者和消费者模型

生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯&#xff0c;而通过阻塞队列来进行通讯&#xff0c;所以生产者生产完数据之后不用等待消费者处理&#xff0c;直接扔给阻塞队列&#xff0c;消费者不找生产者要数据&#…

2024年海南省三支一扶报名指南,照片要求

2024年海南省三支一扶报名指南&#xff0c;照片要求 一、考试时间安排&#xff1a; 报名时间&#xff1a;6月1日8:00至6月7日18:00 准考证打印时间&#xff1a;6月17日8:00 考试时间&#xff1a;6月22日 二、招聘人数 海南省计划招募390名高校毕业生

STM32_IIC

1、IIC简介 I2C&#xff0c;即Inter IC Bus。是由Philips公司开发的一种串行通用数据总线&#xff0c;主要用于近距离、低速的芯片之间的通信&#xff1b;有两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;用于通信双方时钟的同步、SDA&#xff08;Serial Data…

JVM之【执行引擎】

执行引擎 执行引擎是JVM的核心组件之一&#xff0c;它负责将Java字节码文件转换为机器指令并执行。这一过程涉及多个组成部分&#xff0c;各部分协同工作来完成字节码到机器指令的转换和执行。以下是执行引擎的主要组成部分及其作用&#xff1a; 1. 解释器&#xff08;Interp…

vue.js框架快速入门

Vue.js是一个渐进式JavaScript框架&#xff0c;用于构建用户界面和单页应用程序。以下是Vue.js快速入门的基本步骤和概念&#xff1a; 1. 环境准备 确保你的计算机上安装了Node.js&#xff0c;它包括npm&#xff08;Node Package Manager&#xff09;&#xff0c;用于管理项目…

友善RK3399v2平台利用rkmpp实现硬件编解码加速

测试VPU 编译mpp sudo apt update sudo apt install gcc g cmake make cd ~ git clone https://github.com/rockchip-linux/mpp.git cd mpp/build/linux/aarch64/ sed -i s/aarch64-linux-gnu-gcc/gcc/g ./arm.linux.cross.cmake sed -i s/aarch64-linux-gnu-g/g/g ./arm.lin…

如何学习ai agent?

如何学习Agent&#xff0c;推荐阅读《动手做AI Agent》这本书。 推荐理由&#xff1a; 1&#xff1a;一本书能够全方位了解并探索Agent的奥秘&#xff01; &#xff08;1&#xff09;Agent的发展进程。 &#xff08;2&#xff09;可以帮我们做哪些事&#xff1a;自动办公&am…

TypeScript 中的迭代器和生成器

1. 迭代器 迭代器是一种对象&#xff0c;它提供了一种统一的方式来访问集合中的元素&#xff0c;而不暴露集合的内部结构。在 TypeScript 中&#xff0c;迭代器通过实现 Iterator 接口来定义。 interface Iterator<T> {next(): IteratorResult<T>; }interface It…

Liunx登录时相关bash配置文件(登录脚本)

profile类的文件&#xff1a;设定环境变量&#xff0c;运行命令或脚本 bashrc类的文件&#xff1a;定义命令别名 全局配置&#xff1a; /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人配置文件: ~/.bash_profile ~/.bashrc 用户登录时加载bash配置文件的过程&#xff0c;…

码随想录算法训练营第二十四天| 77. 组合

77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution {ArrayList<Integer> path new ArrayList<>();ArrayList<List<Integer>> result new ArrayList<>();public List<List<Integer>> combine(int n, int k) {if(n &…

升级Jenkins从2.263.3到2.440.2

升级Jenkins从2.263.3到2.440.2 ###任何一次升级前&#xff0c;先做整体备份&#xff0c;同时最好对plugins目录和config.xml单独备份。 ###对于任何一次插件安装&#xff0c;务必安装前先备份当前的plugins目录&#xff0c;这是血的教训。升级过程 1、 升级2.263.3到2.263.4…

15-通过JS代码处理窗口滚动条

selenium并不是万能的&#xff0c;页面上有些操作无法实现时&#xff0c;就需要借助JS代码来完成了。selenium提供了一个方法&#xff1a;execute_script()&#xff0c;可以执行JS脚本代码。 比如&#xff1a;当页面上的元素超过一屏后&#xff0c;想操作屏幕下方的元素&#x…

MyBatis查询功能

MyBatis的各种查询功能 1、若查询出的数据只有一条 &#xff08;1)可以通过实体类对象或者集合接收 (2)可以通过List集合接收 (3&#xff09;可以通过map集合接收 结果&#xff1a;{password123456, sex女, id8, age22, email1234qq.com, usernameadmin4} 2、若查询出来的数据有…

[leetcode hot 150]第一百零八题,将有序数组转换为二叉搜索树

题目&#xff1a;给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡二叉搜索树。 给定一个有序的整数数组,我们需要构建一棵平衡的二叉搜索树。平衡二叉树是指任意一个节点的左右子树的高度差不超过1。 由于给定的数组是有序的…