java泛型学习篇(二)
java泛型学习篇(二)
1 自定义泛型类
1.1 基本语法
Class 类型 <T,R,M...>{
//成员,其中...代表<>括号里面的参数可以有多个ja
}
1.2 注意点
1.2.1 属性和方法都是可以使用泛型的
T t;//属性使用泛型,合法public T getT() {return t;}
//方法使用泛型,合法
public void setT(T t) {this.t = t;
}
1.2.2 使用泛型的数组不能再类中初始化
//数组在new的时候不能确定T的类型,就无法创建内存空间
R[] rs=new R[8];//错误的写法 ❌
1.2.3 静态类和静态方法都是不可以使用泛型的
//如果静态方法和静态属性使用了泛型,JVM就无法完成初始化
//因为静态是和类相关的,在类加载中,对象还没有创建
static T t1;
public static R getOne() {//返回类型可以使用泛型return r;
}
1.2.4 泛型类的类型是再创建的时候确定的
ArrayList<Employee> arr = new ArrayList<Employee>();
//在编译期间,就确定了该泛型的类型为Employeev
1.2.5 如果创建对象,并没有指定泛型对应的数据类型,那么默认就是Object
ArrayList arr = new ArrayList();
//这种没有指定泛型,默认就是Object类型
//public class ArrayList<E> extends AbstractList<E>
2 自定义泛型接口
2.1 基本语法
interface 接口名<T,R,M...>
//其中...代表是<>里面所写的泛型的标识符类型可以是多个
2.2 注意点
2.2.1 接口中,静态成员有不能使用泛型
T t="123";
//这样是不行,因为接口中没有写参数的方法默认是被static修饰的方法
//static决定是类加载时就创建好了.那个时候压根就没有对象耶。
2.2.2 泛型接口的类型,由继承接口和实现接口确定
interface A extends B<String,Double>//当我们实现A接口时,指定了T为String类型,R为double类型
//接口B中所有的方法的泛型约束都会改成<String,Double>
2.3 在默认方法中(jdk8及其以后)也是可以使用泛型的
//实现接口时,直接指定泛型接口的类型
//其是给该类中所重写的接口中原有的泛型替换成指定的类型
//如下面的D<Integer,Double>说明了B类中重写了D接口的方法的第一个泛型参数为Intger,第二个参数为Double类型
重写的时候替换的
class C implements D<Integer,Double>
2.4 没有指定类型时.默认是Object类型
Class A implements B 写法一等价于 class A implements B<Object,Object> 写法二
//B是接口,里面使用了泛型约束符(T、R、M、E之类的)
//其中A类重写的B接口的方法都会被<Object,Object>替换掉(不会展示泛型标识符)
//虽然这样写不会报错,但是建议写成写法二
3 自定义泛型方法
3.1 基本语法
修饰符 <T,R,E...> 返回类型 方法名(参数列表){//与之前方法的区别是返回类型前面多了个<T,R,E...>
}
3.2 注意点
3.2.1 泛型方法可以定义在普通类中,也可以定义在泛型类中
a 普通类中
class Teacher{//<E,t>就是泛型,是给say方法去使用的public <E,T> void say(E e,T t){//泛型方法}
}
b 泛型类中
class Student<T,R>{ //泛型类//一般泛型方法的泛型标识符和泛型标识符不一致public<U,M> void eat(U u,M m){//泛型方法}
}
3.2.2 当泛型方法被调用时,类型会确定
Teacher t=new Teacher();
t.say("小红",123);
//当调用方法时,传入参数,编译器会自动确定类型
//你传的是什么类型,那边通过getClass得到的就是什么类型
3.3.3 修饰符后没有<T,R>,那么该方法不是泛型方法,而是使用了泛型
//tell方法不是泛型方法,而是使用了泛型的方法
public void tell(T t){
}
3.3.4 泛型方法可以使用类声明的泛型,也可以使用自己声明的泛型
class Student<T,R>{ //泛型类//t是使用了类声明的泛型,u是使用了自己声明的泛型public<U> void eat(T t,U u){//泛型方法}
}
4 泛型方法练习
4.1 题目内容
/**题目内容1:Apple类方法有问题吗?,若有请指出问题在题目内容1 基础上去运行后面的代码,会输出什么样子的结果
*/
class Apple<T,R,M>{public<E> void floy(E e){//输出当前类名(不含包名)System.out.println(e.getClass().getSimpleName());}public Void eat(U u){}public void run(M m){}
}
//题目内容2
Apple<String,Integer,Double> apple=new Apple<>();
apple.fly(10);
apple.fly(new Dog());
4.2 题目解答
class Apple<T,R,M>{public<E> void floy(E e){//输出当前类名(不含包名)System.out.println(e.getClass().getSimpleName());}public Void eat(U u){} //①这句话会报错,因为并没有类没有声明该泛型标识符,且该方法也不是泛型方法public void run(M m){}
}
//题目内容2
//②T--->String类型,R----->Integer,M----->Double类型
Apple<String,Integer,Double> apple=new Apple<>();
apple.fly(10); //打印的是Integer类型,因为fly方法形参使用的是泛型(泛型是不支持基本数据类型的),那么数据类型会自动装箱成Interger
apple.fly(new Dog());//打印的是Dog类型
5 泛型的继承和通配符
5.1 泛型是不具备继承性的
ArrayList<Object> arr = new ArrayList<String>();//❌
5.2 <?>支持任意泛型类型
//List<?>表示任意泛型的List集合都会被接收
public static void m1(List<?> c) {for (Object object : c) {System.out.println(object);}
}
5.3 <? extends A> 支持A类以及A类的子类,规定了泛型的上限
//List<? extends AA>表示上限,AA和AA子类都可以接收
public static void m2(List<? extends AA> c) {for (Object object : c) {System.out.println(object);}
}
5.4 <? super A> 支持A类以及A类的父类,不限于直接父类,规定了泛型的下限
/List<? super AA>表示下限为AA,AA和AA的所有父类都可以接受,不限于直接父类
public static void printCollection2(List<? super AA> c) {for (Object object : c) {System.out.println(object);}
}
相关文章:
java泛型学习篇(二)
java泛型学习篇(二) 1 自定义泛型类 1.1 基本语法 Class 类型 <T,R,M...>{ //成员,其中...代表<>括号里面的参数可以有多个ja }1.2 注意点 1.2.1 属性和方法都是可以使用泛型的 T t;//属性使用泛型,合法public T getT() {return t;} //方法使用泛型,合法 publi…...
Java基础
Java基础Java基础一、课前问答二、概述三、Java的历史四、Java的特点五、计算机执行机制以及Java执行机制5.1 计算机的执行机制5.2 Java的执行机制六、常用DOS命令七、第一个Java程序八、包的使用九、编码规范十、注释Java基础 一、课前问答 1、什么是程序 2、什么是语言 3、什…...
骨骼控制(一)——动画动态节点(AnimDynamics)
文章目录一、引言二、骨骼控制三、UE蓝图中提供的骨骼控制节点——AnimDynamics动画蓝图节点1、什么是AnimDynamics动画蓝图节点①使用盒体计算惯性②使用约束来限制移动2、AnimDynamics节点的几种常用例子①单骨骼模拟②骨骼链模拟 <h2 id1>③群魔乱舞(这是错…...
Linux系统下搭建maven环境
文章目录前述从官网下载安装包安装 maven修改maven配置修改环境变量测试前述 安装 maven 环境前,需要先安装 java 环境,如果没有安装 java 环境,可以参考:https://blog.csdn.net/weixin_45583303/article/details/118631855 从官…...
English Learning - L2 语音作业打卡 Day3 2023.2.23 周四
English Learning - L2 语音作业打卡 Day3 2023.2.23 周四💌 发音小贴士:💌 当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音[ ɔ: ]&…...
RK3568平台开发系列讲解(驱动基础篇)GIC v3中断控制器
🚀返回专栏总目录 文章目录 一、什么是GIC二、GIC v3中断类型三、GIC v3基本结构3.1、Distributor3.2、CPU interface简介3.3、Redistributor简介3.4、ITS(Interrupt translation service)4、中断状态和处理流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢ARM多核…...
决策树、随机森林、极端随机树(ERT)
声明:本文仅为个人学习记录所用,参考较多,如有侵权,联系删除 决策树 通俗来说,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话: 女儿&#x…...
软件测试之因果图法
因果图法 1. 概述 因果图法是一种**利用图解法分析输入条件、输出结果的各种组合情况,**从而设计测试用例的方法. 因果图法适用于有多个输入和多个输出,而且输入和输入之间有相互的组合关系,输入和输出之间有相互的制约和依赖关系. 使用场景和判定表…...
vue中子组件间接修改父组件传递过来的值
一、前言 Vue官方文档Props单向数据流讲解 Vue中遵循单向数据流,所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递。这避免了子组件意外修改父组件的状态的情况&a…...
Java I/O
前言 关于IO, 想必你听过很多中I/O方式, 有的是OS视角的, 有的是JDK本身支持的, 有的是纯实现视角。但是作为一个developer, 我希望你能先搞清楚上下文之后, 再去理解内容, 否则容易抬杠。这个上下文有横向和纵向两个维度。纵向维度包括JDK底层, JDK上层包装库, 开发框架(如Ne…...
pytorch学习日记之图片的简单卷积、池化
导入图片并转化为张量 import torch import torch.nn as nn import matplotlib.pyplot as plt import numpy as np from PIL import Image mymi Image.open("pic/123.png") # 读取图像转化为灰度图片转化为numpy数组 myimgray np.array(mymi.convert("L"…...
【java基础】抽象类和抽象方法
文章目录基本介绍抽象类抽象方法使用总结基本介绍 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就…...
RDD的内核调度【博学谷学习记录】
RDD的依赖关系RDD的依赖: 指的一个RDD的形成可能是有一个或者多个RDD得出, 此时这个RDD和之前的RDD之间产生依赖关系在Spark中, RDD之间的依赖关系,主要有二种依赖关系:1- 窄依赖:目的: 为了实现并行计算操作, 并且提高容错的能力指的: 一个RDD上的一个分区的数据, 只能完整的交…...
二叉树——二叉搜索树的最小绝对差
二叉搜索树的最小绝对差 链接 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,6,1,3] 输出:1 示例 2&…...
git的使用(终端输入指令)下
文章目录前言1、git 分支创建分支查看分支切换分支合并分支删除分支2.提交到远程仓库远程提交链接一下自己仓库总结前言 上章链接 :git的使用(终端输入指令)上 我们接着上着来说 上章把 git 的 功能实现了一部分,本章我们接着上文…...
python使用influxdb-client管理InfluxDB的bucket
bucket的概念类似数据库的“库”,同时每个库中的数据都因为存在“时间戳”,每个数据都会有一个对应的时间点 influxdb-client-python官方github页面:https://github.com/influxdata/influxdb-client-python 管理bucket的官方示例࿱…...
【c++】模板2—类模板
文章目录类模板语法类模板与函数模板区别类模板中成员函数常见时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件编写类模板与友元类模板语法 类模板作用: 建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚…...
基于SpringCloud的可靠消息最终一致性03:项目骨架代码(下)
上一节把整个项目的演示内容、项目结构、POM文件和配置文件都讲完了,接下来继续。 先安装并启动Nacos,然后在其中建立一个名为xiangwang-payment-dev.yaml的配置文件,内容为: # 指定运行环境 spring:autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.D…...
linux如何彻底的删除文件
一、使用rm命令删除 直接用rm 先用ls -alt看下文件信息及拥有者等 可以看到拥有者是eve用户,所以在eve用户的终端中rm命令即可, 如果是root或者其他,则优先用root或其他账号进行删除 (base) eveEve:~$ ls -alt a.txt -rw-rw-r-- 1 eve eve …...
数据仓库Hive的安装和部署
1)去apache.hive.org官网下载hive 目前hive主要有三大版本,Hive1.x、Hive2.x、Hive3.x Hive1.x已经2年没有更新了,所以这个版本后续基本不会再维护了,不过这个版本已经迭代了很多年了,也是比较稳定的 Hive2.x最近一直…...
Fawkes踩过的坑以及如何解决非常详细
首先我是用anaconda创建的一个虚拟环境 fawkes_env后续的所有操作都是在该环境中实现 不使用anaconda 可直接看第一步 坑:直接用 conda create -n fawkes python3.9 后,pip install -e . 可能因为 TensorFlow 版本过新导致不兼容(Keras 2.3…...
开源密钥管理器VSV:一个加密文件搞定多环境密钥管理
1. 项目概述:一个面向开发者的加密密钥管理器最近在折腾一个内部项目,需要管理不同环境(开发、测试、生产)的数据库密码、API密钥这些敏感信息。一开始图省事,直接写在了.env文件里,结果在代码评审时被同事…...
解放双手:5分钟快速上手智慧树自动化学习工具的完整指南
解放双手:5分钟快速上手智慧树自动化学习工具的完整指南 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 你是否厌倦了每天重复点击智慧树视频的枯燥…...
动物森友会岛屿设计终极指南:用Happy Island Designer轻松规划你的梦想岛屿
动物森友会岛屿设计终极指南:用Happy Island Designer轻松规划你的梦想岛屿 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会…...
实战部署Funannotate基因组注释工具:3种高效配置方案指南
实战部署Funannotate基因组注释工具:3种高效配置方案指南 【免费下载链接】funannotate Eukaryotic Genome Annotation Pipeline 项目地址: https://gitcode.com/gh_mirrors/fu/funannotate Funannotate是一款专业的真核生物基因组注释工具,特别针…...
文心一言深度解析:国产多模态大模型的破局之路
文心一言深度解析:国产多模态大模型的破局之路 引言 在ChatGPT引爆全球AI热潮的背景下,国产大模型如何突围?百度推出的文心一言(ERNIE Bot)作为中国AI产业的一面旗帜,凭借其在多模态理解与生成、中文场景深…...
Windows安卓应用安装神器:APK Installer完整使用指南
Windows安卓应用安装神器:APK Installer完整使用指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows电脑无法运行安卓应用而烦恼吗ÿ…...
STM32实战:手把手教你用Cubemx配置交流充电桩的CP信号检测(附代码)
STM32实战:从零构建充电桩CP信号检测系统 充电桩作为新能源汽车基础设施的核心组件,其通信协议的可靠性直接关系到充电安全。在实际工程中,CP(Control Pilot)信号的检测往往是开发者的第一个技术拦路虎。我曾在一个海外…...
地铁站内人员危险情况检测人员跌倒检测数据集VOC+YOLO格式4369张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4369 标注数量(xml文件个数):4369 标注数量(txt文件个数):4369 …...
Windows NFSv4.1客户端终极指南:让Windows系统无缝访问NFS服务器
Windows NFSv4.1客户端终极指南:让Windows系统无缝访问NFS服务器 【免费下载链接】ms-nfs41-client NFSv4.1 Client for Windows 项目地址: https://gitcode.com/gh_mirrors/ms/ms-nfs41-client 想要在Windows系统中像操作本地文件一样访问远程NFS服务器吗&a…...
