泛型Java

news2024/10/7 10:22:45

泛型

泛型:标签
在这里插入图片描述

  • 集合接口和集合类在jdk5.0之后都修改为带泛型的结构
  • 在实例化集合类时,可以指明具体的泛型类型
  • 指明完以后,在集合类或者集合接口中凡是定义类或接口时,内部结构使用到泛型的位置,都指定为实例化时的泛型类型
  • 泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,用包装类替换
  • 如果实例化时,没有指明泛型的位置,就是Object类型

package Collection;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.junit.Test;

public class ArrayListTest {
	// 使用泛型
	@Test
	public void test(){
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(12);
		list.add(25);
		list.add(33);
		//list.add("AA");//报错,不让你进来了,保证数据的安全
		// 方式一
//		for(Integer scores : list){
//			int stuScore = scores;//不用强转了
//			System.out.println(stuScore);
//		}
	
		// 方式二
		Iterator<Integer> iterator = list.iterator();
		while(iterator.hasNext()){
			int scores = iterator.next();
			System.out.println(scores);
		}
		
	}
	
	//在集合中使用泛型
	@Test
	public void test2(){
		Map<String,Integer> map = new HashMap<String,Integer>();
		
		map.put("tom", 123);
		map.put("am", 52);
		map.put("sd", 13);
		map.put("twd", 173);
		
		// 泛型的嵌套
		Set<Map.Entry<String,Integer>> entry = map.entrySet();
		System.out.println(entry);
		Iterator<Map.Entry<String, Integer>> iterator = entry.iterator();
		while(iterator.hasNext()){
			Map.Entry<String, Integer> e = iterator.next();
			String key = e.getKey();
			Integer value = e.getValue();
			System.out.println(key + "----------" + value);
		}
		
		
	}

}

自定义泛型结构:泛型类,泛型接口,泛型方法

一个自定义Order类

package File;

// 自定义泛型类
public class Order<T> {
	
	String orderName;
	int orderId;
	
	// 类的内部结构就可以使用类的泛型
	T orderT;
	public Order(){}
	
	public Order(String orderName,int orderId,T orderT){
		this.orderName = orderName;
		this.orderId = orderId;
		this.orderT = orderT;
	}
	
	public T getOrderT(){
		return orderT;
	}
	
	public void setOrderT(T orderT){
		this.orderT = orderT;
	}

	@Override
	public String toString() {
		return "Order [orderName=" + orderName + ", orderId=" + orderId + ", orderT=" + orderT + "]";
	}
	
	
}

在相同包下测试

package File;

import org.junit.Test;

public class GenericTest1 {
	
	@Test
	public void test1(){
		//Order order = new Order();  //没有指明类的泛型,则此泛型类型为Object
		// 建议写上,这样第三个参数就是String类型
		Order<String> order1 = new Order<String>("OrderAA",123,"string");
		
		
		
	}

}

子类在继承带泛型的父类时,指明了泛型类型,则实例化对象时,不再需要指明泛型

需要注意的点

在这里插入图片描述

在这里插入图片描述

泛型方法是在方法中出现了泛型的结构,泛型的参数与类的泛型参数没有任何关系。即泛型方法所属的类是不是泛型类无关

泛型方法,可以声明为静态,因为泛型参数是在调用方法时确定,并非在实例化时确定

泛型在继承关系中的体现

类A是类B的父类,G《A》 和 G《B》二者不具备子父类关系,二者是并列关系

List<Object> list1 = null;
List<String> list2 = null;
list1 = list2;//报错

但A《G》 是 B《G》 的父类

通配符的使用

通配符:?
G《A》和G《B》 的共同父类是G《?》

@Test
public void test2(){
	List<Object> list1 = null;
	List<String> list2 = null;
	
	List<?> list3 = null;
	
	list3 = list1;
	list3 = list2;
	
	print(list1);//
	print(list2); //都可以调用了
}

public void print(List<?> list){
	Iterator<?> iterator = list.iterator();
	while(iterator.hasNext()){
		Object obj = iterator.next();
		System.out.println(obj);
	}
	
	}

对于list<?> 就不能向list中添加数据了,唯一能加Null,允许读取数据,读取的类型为object

有限制条件的通配符的使用

? extends Person (<=Person)
? super Person (>=Person)

对于第二个,可以add(Person 及 Person的子类)

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

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

相关文章

Java姓名与手机号中间用*号代替 字符串*号替换

/*** 姓名与手机号中间用*号代替*/public static String caseStarSymbol(String nameStr){ // String nameStr "程序源码论坛"; // String mobile "15888888888";String nameStr1 null;char[] r nameStr.toCharArray(); // char[] m mobi…

服务器硬件规格常用查看命令——磁盘相关命令

smartctl smartctl是一个能够控制和监控磁盘的SMART&#xff08;Self-Monitoring&#xff0c;Analysis and Reporting Technology&#xff0c;自我监测、分析和报告技术&#xff09;命令。 使用方法&#xff1a; 提示&#xff1a;使用该命令只能查看到裸盘设备的型号信息&…

ATtiny13与Proteus仿真-开发与Proteus仿真环境搭建

ATtiny13开发与Proteus仿真环境搭建 本文将详细介绍如何搭建ATtiny13开发环境与Proteus仿真环境。 1、ATtiny13开发环境搭建 本系列文章将使用Microchip Studio作为ATtiny13的集成开发环境(IDE)。 Microchip Studio 是一个集成开发环境 (IDE),用于开发和调试 AVR 和 SAM 微…

Microsoft .NET Desktop Runtime (Framework)

Microsoft .NET Desktop Runtime (Framework) 微软NET Framework或数据库网络是一种软件技术&#xff0c;包括Microsoft的几种编程语言。安装每个窗口后所需的工具之一是NETFramework技术。会的。基于这种技术编写的许多软件工具&#xff0c;它们将得到支持。 -是的。 微软得分…

什么是运放的输入失调电压

大家可以看到这个电路&#xff0c;运放的同相端和反相端都接在0V&#xff0c;大家觉得运放的输出电压是多少。 很多同学觉得&#xff0c;在开环条件下根据运放的传输曲线&#xff0c;当同相端电压等于反相端电压时&#xff0c;运放的输出电压等于0&#xff0c; 可是实际测量运放…

语音识别之Kaldi:神经网络实战

ASR神经网络实战 kaldi语音识别理论与实践课程学习。 之前学习了基于GMM-HMM的传统语音识别&#xff1a;GMM-HMM 其中也包含Kaldi架构的简介&#xff0c;语音数据的预处理&#xff0c;特征提取等过程。 今天学习基于神经网络的语音识别。 神经网络训练脚本 以TDNN为例。 K…

Python IDE之 pycharm的十大奇技淫巧

说到Python的IDE&#xff0c;可能大家都会想到一个非常有名的工具&#xff0c;就是pycharm&#xff0c;他是最受欢迎的一个Python开发工具&#xff0c;其原因就是因为功能强大&#xff0c;适合构建大型项目&#xff0c;当然啦&#xff0c;功能强大同时也就意味着操作复杂&#…

语音学发音语音学笔记

词汇表 articulators 咬合架发音器 cochlea 耳蜗 consonants 元音 dialect 方言 eardrum 鼓膜 endolymph 内淋巴 Epiglottis 喉头盖 formants 共振峰 fricative 摩擦音 Larynx 喉 meatus 耳道 monosyllabic 单音节 pinna 耳廊 pitch 音调 pitch harmonics 音高泛音 phonation …

【云原生 | Kubernetes 实战】09、K8s 控制器 Replicaset 入门到企业实战应用

目录 K8s 控制器 Replicaset 一、Replicaset 控制器&#xff1a;概念、原理解读 1.1 Replicaset 概述 1.2 Replicaset 工作原理&#xff1a;如何管理 Pod &#xff1f; 二、Replicaset 资源清单文件编写技巧 三、Replicaset 使用案例&#xff1a;部署 Guestbook 留言板 …

第16章 母函数

第16章 母函数 母函数是离散数学领域最意外、最有用的发明之一。粗略来讲&#xff0c;母函数将序列问题转化为代数问题。 组合数学中常常出现普通型母函数、指数型母函数、狄利克雷型母函数 16.1 无穷级数 通俗地说,母函数F(x)就是无穷级数 符号[xnx^nxn]F(x)表示母函数F(x…

策略模式学习

0.引言 最近想整理一下代码。我的想法是使用继承的方案&#xff0c;使用多态写一个interface&#xff0c;然后不同的方法来继承它。最近ChatGPT比较火&#xff0c;顺便问了一下它&#xff1a; 在C代码设计中&#xff0c;我对同一算法设计了不同的实现&#xff0c;例如计算平均…

使用 Web 应用程序示例在 Java 中进行安全编码

使用 Web 应用程序示例在 Java 中进行安全编码 使用 Java 中的 Online Shop Web 应用程序示例了解最常见的漏洞以及如何避免它们 课程英文名&#xff1a;Secure coding Dive into Injections with Java & Spring boot 此视频教程共36.0小时&#xff0c;中英双语字幕&…

1x9 Dual SC Optical Transceivers

1、Pin Assignment & Description TD, TD-: DC coupled LVPECL inputs for the transmitter. 50Ω differential lines. RD, RD-: Open-emitter out circuits. DC coupled LVPECL outputs for the receiver. 50Ω differential lines. SD: Signal Detect. Normal opti…

【工业控制】多变量动态矩阵预测控制(DMC)【含Matlab源码 1499期】

⛄一、简介&#xff08;附课程报告&#xff09; 1引言 众所周知&#xff0c;上世纪 60 年代初形成的现代控制理论在航空、航天等领域取得了辉煌的成果。 然而人们不久就发现在完美的理论与控制之间还存在着巨大的鸿沟。主要表现在以下几个方面: 1.现代控制理论的基点是对象精确…

OneHotEncoder独热编码

首先了解机器学习中的特征类别&#xff1a;连续型特征和离散型特征。 拿到获取的原始特征&#xff0c;必须对每一特征分别进行归一化&#xff0c;比如&#xff0c;特征A的取值范围是[-1000,1000]&#xff0c;特征B的取值范围是[-1,1].如果使用logistic回归&#xff0c;w1*x1w2…

Docker-compose编排

一、Docker Compose前言 Docker Compose的前身是Fig&#xff0c;Fig被Docker收购之后正式更名为Compose&#xff0c;Compose向下兼容Fig Docker Compose是一个用于定义和运行多容器Docker应用的工具&#xff0c;只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应…

STC 51单片机61——呼吸灯

#include "reg52.h" sbit LedHuxi1P1^0; #define time (65536-1000) // 单次定时1ms unsigned char T_High, T, ti, dir; void InitTimer0(void) { TMOD0x01; TL0 time; //initial timer1 low byte TH0 time >> 8; …

从来没有一家互联网公司不问【设计模式+SSM框架底层源码】

结构型模式 创建型模式 行为型模式 六大原则 免费分享学习设计模式整理的学习笔记文档 Spring5源码解读 **其实&#xff0c;学习编程不是学习配置东西&#xff0c;然后写编程套路。写程序最重要的是你能心中有自己的一套架构思路&#xff0c;比如我现在就没有写Java的项目…

还在公域流量里面投入大量广告费而无法变现,不如试试私域流量吧

大家好&#xff0c;我是林工&#xff0c;不知道大家听说过私域流量这个词没有&#xff0c;听起来是一个听起来很模糊的概念。很多人都知道它大概的意思&#xff0c;但具体要落实到“私域流量怎么做”这件事情上&#xff0c;大都都是一问三不知&#xff0c;不知道该如何入手。 其…

艾美捷魔力红组织蛋白酶B活性分析试剂盒研究手册

艾美捷ICT魔力红组织蛋白酶B活性分析试剂盒包含&#xff1a; 套件937:25测试 魔红基质&#xff08;MR-RR2&#xff09;&#xff0c;1 25测试小瓶&#xff0c;#6133 Hoechst 33342&#xff0c;1毫升&#xff0c;#639 吖啶橙&#xff0c;0.5 mL&#xff0c;#6130 工具包手册…