JAVA 泛型的相关知识点

2023-11-15

/*
 * 泛型分为:   1、泛型类
 *              2、泛型接口
 *              3、泛型方法
 * -----》1、泛型类: 定义:class Test<T1,T2>{}  //其中的T1,T2就是类中的成员变量或者方法会用到的变量类型
 *                 申请类对象时候:---》1、带具体的泛化类型:Test <Integer,String> a =new Test<>(); 
 *                                ---》 2、不带具体的泛化类型:Test a = new Test();这种方案中的类对象会根据
 *                                接收的对象类型不同体现出不同的效果!!!!!!!!其实可以看出不指明具体类型
 *                                的泛型类好像使用更加的灵活,但是不能强制类型转换,不然容易出问题。
 * TIPS:Test<Integer,Integer> 和 Test<Number,Number>一定是两个不同的东西!!同时泛型类型对象也不能用instanceOf
 * 来进行类型的判断,否则会报错
 *------》2、泛型接口:定义和泛型类基本差不多。interface Test<T>{ }
 *
 **************重点:泛型通配符:当我们在写一个方法的是否如:public T add(T a,T b){  }
 *注意关键点在于我们在写参数的时候,单个参数的类型是可以写成泛型的 public static <T> T sum(T a,T b){}
 *这时的参数是泛型的,根据传入不同进行解释。但是如果是传入的一个泛型类型的对象的时候,就不能写成
 *public static void add(FX<Integer,String> a,FX<T1> b)  //如左侧所示,第一个参数是正确的定义,第二个参数那样
 *写是会报错的,那么这就带来了一个问题,泛型类型的方法不那么“泛型”,因为你都具体指定好了幻化成什么类型的参数
 *那我还玩什么?这里就需要用到泛型通配符了。
 *public static void add(FX<?,?> a,FX<?,?> b)  ?就代表一个具体的类型,可以接受任意的类型,可以看成是Object
 * 
 * ----》3、泛型方法:泛型方法:public static <T1,T2> T1 sum(T1 a,T2 b){} 在使用的时候直接和正常使用一样,该
 * 方法会自动根据我们传入的参数类型进行响应的解释。特别注意在泛型类中定义的泛型方法,如我在这个sum方法中定义了
 * T1和T2类型,我的泛型类可以不包含这两个类型,定义成<E>,这是不影响的。同时如果我还定义了一个泛型方法,该方法
 * 的泛型指定变量也是<E>,那么这个<E>和类上的那个不是同一个东西。
 * 
 * TIPS:静态泛型方法中不能使用类上的泛型参数变量
 * 
 * 
 * TIPS:我们可以限制泛型泛化的上下边界,如我现在只想让一个类的子类泛化传入,那么可以采用:
 * public void MySHow(FX<?extends Runnable,?extends Serializable> a)//这样传入的这两个泛型的类型只能是
 * Runnable的子类和Serializable的子类。
 * 
 * public <T extends Number> T showKeyName(Generic<T> container)  //上下边界,必须一起出现,但是上界可以自己
 * 单独出现。
 * 
 * TIPS:泛型数组的定义时,我们不能生产一个确切的泛型类型数组如:
 *         FX<Integer,String> [] array = new FX<Integer,String>[10]; //这个是会报错的
 *        FX<?,?> [] array = new FX<?,?>[10];      //但是使用通配符的情况是可以的,使用的时候需要加强制转换。
 * 
 */

class FX<T1,T2>{
	T1 a;
	T2 b;
	FX(){}
	FX(T1 a,T2 b){
		this.a = a;
		this.b = b;
	}
	
	public void show() {
		System.out.println("a:"+this.a+",  b:"+this.b);
	}
	
}

public class FanXinLearning {

	//定义一个泛型类型的方法:
	public static void add(FX<?,?> a,FX<?,?> b) {
		a.show();b.show();
	}
	
	public static <T1,T2> T1 sum(T1 a,T2 b) {
		return a;
	}
	
	public void MySHow(FX<?extends Runnable,?extends Serializable> a) {}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FX a = new FX("阮聪",23);
		FX b = new FX(1,100);
		FX c = new FX(3.1415,false);
		List l = new ArrayList<>();
		l.add(a);
		l.add(b);
		l.add(c);
		l.forEach(var->((FX)var).show());
		add(a,b);
		System.out.println(sum(1,2));
//		FX<Integer,String> [] array = new FX<Integer,String>[10];
		FX<?,?> [] arraya = new FX<?,?>[10];
	}

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA 泛型的相关知识点 的相关文章

  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • Docker学习笔记05-----镜像仓库之官方Docker Hub

    官方Docker Hub https hub docker com 1 创建Repository 2 构建容器镜像 2 1 创建Dockerfile FROM java 8 MAINTAINER itmrl LABEL name hello
  • Qt颜色选择器(HSV)

    目录 引言 HSV颜色空间 实现思路 代码实现 引言 基于Qt实现的HSV颜色选择器 效果如下 HSV颜色空间 HSV Hue Saturation Value 是根据颜色的直观特征创建的颜色模型 如下图所示 Hue为色调 通过角度表示不同
  • 3_Nginx重载、热部署、日志切割

    文章目录 常用命令 重载配置文件 热部署 流程 日志切割 常用命令 获取帮助 nginx h 使用指定的配置文件 nginx c conf file 在命令行中覆盖配置文件中的指令 nginx g 指定运行目录 nginx p 发送信号 n
  • 【Vue学习笔记3】使用Vite开启一个Vue3工程项目

    1 什么是Vite Vite是一个web开发构建工具 Vite 的竞品是 Webpack 而且按照现在的趋势看 使用率超过 Webpack 也是早晚的事 Vite 主要提升的是开发的体验 Webpack启动调试环境需要 3 分钟都很常见 V
  • linux环境下的Qt编程问题解决

    1 gcc编译器无法使用 原因可能是没有安装g 终端输入命令 sudo apt get install g 2 编译程序报错Could not start process make qmake all 解决办法 终端输入命令 sudo ap
  • 机器学习(第二章)—— 模型评估

    目录 一 评估指标的局限性 二 ROC曲线 三 余弦距离的应用 四 A B测试的陷阱 五 模型的评估方法 六 超参数优化 七 过拟合与欠拟合 准确率的局限性 精确率与召回率的权衡 平方根误差的 意外 什么是ROC曲线 为什么要进行在线A B
  • include过滤器

    include过滤器分为core gui io scene video几个文件夹以及 IEventReceiver h Irrlicht h Irrlicht h IrrlichtDevice h Irrlicht h IrrlichtDe
  • 【Selenium】webdriver.ChromeOptions()官方文档参数

    Google官方Chrome文档 在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the
  • CLIP与Chinese-CLIP:多模态预训练模型解读和图文检索体验

    欢迎关注公众号 AICV与前沿 一起学习最新技术吧 欢迎关注公众号 AICV与前沿 一起学习最新技术吧 欢迎关注公众号 AICV与前沿 一起学习最新技术吧 1 CLIP回顾 CLIP是2021年OpenAI提出的基于图文对比学习的多模态预训
  • MyBatis-Plus 使用拦截器实现数据权限控制

    前言背景 平时开发中遇到根据当前用户的角色 只能查看数据权限范围的数据需求 列表实现方案有两种 一是在开发初期就做好判断赛选 但如果这个需求是中途加的 或不希望每个接口都加一遍 就可以方案二加拦截器的方式 在mybatis执行sql前修改语
  • C++中类静态方法与实例方法的区别

    生成时机 静态方法在编译的时候就已经加载了并分配了内存 而实例方法只有在对象创建之后才会为实例方法分配内存 因此调用静态方法速度快 但是会占用内存 调用方式 静态方法归整个类所有 因此调用它不需要实例化 可以直接调用 类 静态方法 实例方法
  • stock趋势交易系统

    进场步骤 1 趋势 2 做单区间 回调区间就是做单区间 比如回调至最长红柱的1 3以内开始 变红或拉长不再开始 做单区间级别比趋势级别低一个级别 MACD绿柱缩短 3 决策点 比做单区间第一个级别 4 筛选 比如 看这个决策点是怎么得来的
  • js函数重载

    function createOverload var callMap new Map function overload args const key args map args gt typeof args join 得到形如 stri
  • 雷达中和计算机视觉中的目标识别检测及跟踪区别在哪里?

    作者 梦里寻梦 苦瓜 编辑 汽车人 原文链接 https www zhihu com question 58615878 answer 2100196576 https www zhihu com question 58615878 ans
  • 漏洞复现- - -CVE-2016-5195 Dirty Cow脏牛提权漏洞

    目录 一 漏洞分析 二 形成原因 三 漏洞检测复现 1 编译poc 文件 2 复现漏洞 四 漏洞修复 方法一 方法二 一 漏洞分析 脏牛 Dirty COW 编号 CVE 2016 5195 是2016年10月18日被曝出的存在于Linux
  • VScode中js文件代码没有高亮问题

    问题 VScode中js文件js代码没有高亮 显示白色 解决方法 文件 gt 首选项 gt 设置 找到setting json 然后注释掉这段代码 重新打开文件 JS代码就有高亮了 白色看着实在别扭
  • python元组 列表 字符串最后一个下标_python字符串列表元组序列操作

    Table of Contents generated with DocToc python系列 字符串 列表 元组的操作 序列的访问及运算符 序列是为满足程序中复杂的数据表示 python支持组合数据类型 可以将一批数据作为一个整体进行数
  • 数据湖:设计更好的架构、存储、安全和数据治理

    问题导读 1 对数据湖有哪些预期 2 数据湖架构如何设计 3 如何做好数据治理工作 4 如何保障数据湖的安全 前言对任何业务来说 数据驱动的结果 预告和对趋势的预测都是必不可少的 今天 在我们所做的每件事中 都能看到某种分析的逻辑在背后 从
  • C语言输出3个整数最大值的案例教程

    思路分析 先比出2个整数的最大值 然后用最大值和第三个整数比较从而求出3个整数的最大值 我们今天用几种办法输出3个整数最大值 方法一 使用if else语句以及输入输出语句来编写 方法二 使用三元运算符以及输入输出语句来编写 方法三 使用自
  • JAVA 泛型的相关知识点

    泛型分为 1 泛型类 2 泛型接口 3 泛型方法 1 泛型类 定义 class Test