Java常用对象API——泛型

1、使用Spark SQL查询Databricks:全面指南 本博客全面介绍了如何使用Spark SQL在Databricks平台上进行高效的数据查询与分析。内容涵盖SQL基础操作、数据过滤、复杂查询技巧、简单与高级计算、数据聚合、日期处理等核心主题,适合数据分析师、开发人员及SQL学习者。通过逐步讲解和实用示例,帮助读者掌握从入门到高级的SQL技能,并提供学习路径建议和免费代码资源,助力实际数据分析工作。 阅读详情

ava常用对象API——泛型

 

泛型

jdk1.5出现的安全机制。

好处:
1,将运行时期的问题ClassCastException转到了编译时期。
2,避免了强制转换的麻烦。

<>:什么时候用?当操作的引用数据类型不确定的时候。就使用<>。将要操作的引用数据类型传入即可.
其实<>就是一个用于接收具体引用数据类型的参数范围。

在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型 。

泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。

import java.util.ArrayList;
import java.util.Iterator;

public class GenericDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		
		int[] arr = new int[4];
			
		ArrayList<String> al = new ArrayList<String>();//泛型:明确传入的只能是String类型
		
		al.add("abc");//public boolean add(Object obj)
		al.add("hahah");
//		al.add(4);//al.add(new Integer(4));放不进去了
		
		Iterator<String> it = al.iterator();
		while(it.hasNext()){
			
			String str = it.next();
			System.out.println(str);
		}
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。
为什么擦除呢?为了兼容运行的类加载器。

泛型的补偿:在运行时,通过获取元素的类型进行转换动作。使用者不必再强制转换了。

泛型在集合中的应用

例子:

import java.util.Iterator;
import java.util.TreeSet;

import cn.itcast.p2.bean.Person;
import cn.itcast.p3.comparator.ComparatorByName;

public class GenericDemo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//泛型:传入Person类
		TreeSet<Person> ts = new TreeSet<Person>(new ComparatorByName());
		ts.add(new Person("lisi8",21));
		ts.add(new Person("lisi3",23));
		ts.add(new Person("lisi",21));
		ts.add(new Person("lis0",20));
		
		Iterator<Person> it = ts.iterator();
		
		while(it.hasNext()){
			Person p = it.next();
			System.out.println(p.getName()+":"+p.getAge());
		}
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
//ComparatorByName.java  这个比较器通过名称排序
import java.util.Comparator;

import cn.itcast.p2.bean.Person;

public class ComparatorByName implements Comparator<Person> {

	@Override
	public int compare(Person o1, Person o2) {
		
		int temp = o1.getName().compareTo(o2.getName());
		return temp==0? o1.getAge()-o2.getAge(): temp;
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行结果:(对Person对象按名称排序)
在这里插入图片描述

泛型类

在jdk1.5后,使用泛型来接收类中要操作的引用数据类型。
泛型类。什么时候用?当类中的操作的引用数据类型不确定的时候,就使用泛型来表示。

public class Tool<QQ>{//泛型类
	private QQ q;

	public QQ getObject() {
		return q;
	}

	public void setObject(QQ object) {
		this.q = object;
	}
public class GenericDefineDemo3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		
		Tool<Student> tool = new Tool<Student>();
		
	    tool.setObject(new Worker());//在编译时就报错

		Student stu = tool.getObject();

		
	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

泛型方法


    public class Tool<QQ>{
	private QQ q;

	public QQ getObject() {
		return q;
	}

	public void setObject(QQ object) {
		this.q = object;
	}
	
	
	/**
	 * 将泛型定义在方法上。
	 * @param str
	 */
	public <W> void show(W str){
		System.out.println("show : "+str.toString());
	}
	public void print(QQ str){
		System.out.println("print : "+str);
	}
	
	/**
	 * 当方法静态时,不能访问类中定义的泛型。
	 * 如果静态方法使用泛型,只能将泛型定义在方法上。 泛型必须写在返回值类型的前面,静态修饰符的后面
	 * @param obj
	 */
	public static <Y> void method(Y obj){
		System.out.println("method:"+obj);
	}
}

public class GenericDefineDemo4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		Tool<String> tool = new Tool<String>();
		
		tool.show(new Integer(4));
		tool.show("abc");
		tool.print("hahah");

		Tool.method("haha");//调用静态方法
		Tool.method(new Integer(9));
	}
	

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

在这里插入图片描述

泛型接口

public class GenericDefineDemo5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		InterImpl in = new InterImpl();
		in.show("abc");
		
		InterImpl2<Integer> in2 = new InterImpl2<Integer>();//实现子类对象的时候才知道具体的类型
		in2.show(5);
	}
}

//泛型接口,将泛型定义在接口上。 
interface Inter<T>{
	public void show(T t);
}


class InterImpl2<Q> implements Inter<Q>{ //实现接口的时候继续定义泛型
	public void show(Q q){
		System.out.println("show :"+q);
	}
}




class InterImpl implements Inter<String>{//实现接口,明确参数类型
	public void show(String str){
		System.out.println("show :"+str);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

泛型限定

泛型的通配符:? 用来代表未知类型。

演示1:?通配符

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class GenericAdvanceDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		ArrayList<String> al = new ArrayList<String>();
		
		al.add("abc");
		al.add("hehe");
		
		ArrayList<Integer> al2 = new ArrayList<Integer>();
		
		al2.add(5);
		al2.add(67);
		
		printCollection(al);
		printCollection(al2);
	}

	/**
	 * 迭代并打印集合中元素。
	 * @param al
	 */
	public static void printCollection(Collection<?> al) {	//通配符的使用
	
		Iterator<?> it = al.iterator();
		
		while(it.hasNext()){

			System.out.println(it.next().toString());
		}
		
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

运行结果:
在这里插入图片描述

演示2:? extends E (上限)

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import cn.itcast.p2.bean.Person;
import cn.itcast.p2.bean.Student;
import cn.itcast.p2.bean.Worker;

public class GenericAdvanceDemo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//创建3个ArrayList,分别存Worker,Student,String
		ArrayList<Worker> al = new ArrayList<Worker>();
		
		al.add(new Worker("Work",30));
		al.add(new Worker("Work",34));
		
		ArrayList<Student> al2 = new ArrayList<Student>();
		
		al2.add(new Student("stu1",11));
		al2.add(new Student("stu2",22));
		ArrayList<String> al3 = new ArrayList<String>();
		
		al3.add("stu3331");
		al3.add("stu33332");
		
		printCollection(al2);
		printCollection(al);
		//printCollection(al3);编译不通过 因为String不是Person的子类
	}

	/**
	 * 迭代并打印集合中元素。
	 * 
	 * 可以对类型进行限定:
	 * ? extends E:接收E类型或者E的子类型对象。上限!
	 * 
	 * ? super E :接收E类型或者E的父类型。下限!
	 * @param al
	 */
	public static void printCollection(Collection<? extends Person> al) {//泛型的限定 只接收Person的子类
		Iterator<? extends Person> it = al.iterator();
		
		while(it.hasNext()){

			Person p = it.next();
			
			System.out.println(p.getName()+":"+p.getAge());
		}	
	}	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

运行结果:
在这里插入图片描述

演示3:? super E(下限)

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import cn.itcast.p2.bean.Person;
import cn.itcast.p2.bean.Student;


public class GenericAdvanceDemo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		ArrayList<Person> al = new ArrayList<Person>();
		
		al.add(new Person("Person",30));
		al.add(new Person("Person",34));
		
		ArrayList<Student> al2 = new ArrayList<Student>();
		
		al2.add(new Student("stu1",11));
		al2.add(new Student("stu2",22));
		ArrayList<String> al3 = new ArrayList<String>();
		
		al3.add("stu3331");
		al3.add("stu33332");
		
		printCollection(al2);
		printCollection(al);
		//printCollection(al3);编译不通过 
	}
	//? super E :接收E类型或者E的父类型。下限!
	public static void printCollection(Collection<? super Student> al){
		Iterator<? super Student> it = al.iterator();
		
		while(it.hasNext()){
			
			System.out.println(it.next());
		}
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

运行结果:
在这里插入图片描述

上限的体现

一般在存储元素的时候都是用上限,因为这样取出都是按照上限类型来运算的。不会出现类型安全隐患。
比如TreeSet的addAll方法:
在这里插入图片描述

下限的体现

什么时候用下限呢?通常对集合中的元素进行取出操作时,可以使用下限。
例如:

class TreeSet<Worker>
 {
  		Tree(Comparator<? super Worker> comp);
  }
  • 1
  • 2
  • 3
  • 4

常用对象API_01

82

常用对象API_01 1.Map集合 1.1 特点 存储的是键值对 必须保证键的唯一性 1.2 常用方法 1. 添加 ... 来自: qq_37118873

逆向分析-SeparationPreview.aip-分色预览-结构分析(一)-x64dbg条件日志打印-命令表达式-PS脚本 从功能上分析,仅显示使用的专色这个功能,并没有触发插件接口。使用X64dbg加载illustrator进程,切换到句柄窗口,在窗口过程中,右键刷新获取界面。在x64dbg中,在UI中可以输入一些条件表达式,能够计算出对应的值,并打印在日志中。常用的,如果非暂停,输出第一个参数。参数二是utf16的指针,utf16@字符串地址,这里的字符串地址为[[ebp-108]]参数一是utf8的,utf8@字符串地址,这里的字符串地址为[ebp-28]从界面上分析,一个颜色列表,及仅显示专色的多选框组成。 阅读详情

相关推荐

保姆级教程:用GlobleLand30数据+GTB3.3软件,一步步搞定MSPA景观格局分析

本文提供GlobleLand30数据结合GTB3.3软件进行MSPA景观格局分析的保姆级教程,涵盖数据预处理、软件操作、结果解读全流程,特别针对零基础用户常见问题提供解决方案,助力研究者高效完成景观生态学分析。

weixin_26757925的博客 450

springboot整合swagger

使用方法 两个pom依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox&

qq_34501351的博客 284

别再拍脑袋估工时了!手把手教你用FPA功能点分析法,给软件项目算笔明白账

本文详细介绍了FPA功能点分析法在软件开发工作量评估中的应用,帮助团队告别拍脑袋估算。通过量化系统功能组件,FPA提供客观的工时和成本预估,特别适合需求不明确的项目初期。文章以财务系统为例,拆解FPA计算流程,并分享实用估算模板,助力技术管理者提升项目规划能力。

weixin_42614269的博客 388

api响应泛型参数 swagger_API接口文档编写工具Swagger和swagger-bootstrap-ui的使用介绍...

前言:写服务端接口的同学,写完后需要跟移动端解释怎么使用这些接口,这时候是需要用到接口文档了,市面上常见的编写方式有很多种,各有优劣,笔者公司权衡利弊之后选用了Swagger,在全球使用还是很广泛的. 本文介绍 Swagger 的使用,及国人出品的Swagger主题swagger-bootstrap-ui的简单使用.Swagger的使用先上结果,配置完Swagger之后的默认界面是这样的。Swag...

weixin_42561623的博客 994

uniapp 开发微信小程序请求问题 , 真机调试正常,开发工具正常,但是使用扫码预览接口都是不通的,发布到体验版也是请求失败

uniapp开发小程序体验版接口请求失败(真机可以)

weixin_60408555的博客 3954

潇洒郎: 小白一次性成功——红米 Note 12 5G Android12 系统13.0.16/14.0.9 小米红米手机解BL锁+ROOT-刷面具—官方ROM下载-线刷降级—解锁system系统分区

小白一次性成功——红米 Note 12 5G Android12 系统13.0.16/14.0.9 小米红米手机解BL锁+ROOT-刷面具—官方ROM下载-线刷降级—解锁system系统分区

潇洒郎的博客 4585

api响应泛型参数 swagger_OpenAPI规范和Swagger简介

OpenAPI是用于描述REST API的规范。您可以将OpenAPI规范视为DITA规范。使用DITA,有一些用于定义帮助组件的特定XML元素,以及这些元素的必需顺序和层次结构。不同的工具可以读取DITA并从该信息中建立文档网站。使用OpenAPI(而不是XML),您可以拥有一组JSON对象,它们具有定义其命名,顺序和内容的特定架构。此JSON文件(通常用YAML而不是JSON表示)描述了API...

weixin_35182280的博客 2125

CLRNet车道线检测模型在Orin Nano Super开发板上的全栈部署与优化实践

本文详细介绍了将CLRNet车道线检测模型部署到NVIDIA Orin Nano Super开发板的全过程。内容包括:1) Orin开发板硬件规格分析;2) JetPack SDK环境配置与Python虚拟环境搭建;3) CLRNet模型架构解析与PyTorch实现;4) 模型转换与TensorRT加速优化方法。通过系统性的环境配置、模型转换和性能优化,为边缘计算场景下的车道线检测应用提供了完整的解决方案,实现了在Orin平台上的高效部署。

huanghm88的专栏 226

Android Studio目录结构介绍, 安卓开发入门

安卓学习:Android Studio目录结构 刚刚开始学Android开发, 来分享一下Android Studio 项目的目录结构 这是刚刚创建完项目的样子 任何一个新建的项目都会默认使用Android模式的项目结构, 但这并不是项目最真实的目录结构, 而是被Android Studio转换过来的, 这种项目结构简洁明了,适合进行快速开发,但是对于新手来说可能并不易于理解。 点击图片中Android区域可以切换项目结构模式. 这里我们项目结构切换为Project, 这就是最真实的目录结构 这里开始

天行健 君子以自强不息,地势坤 君子以厚德载物。 5577

Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)

摘要:基于Spring AI的智能合同审核系统开发 本文介绍了基于Spring Boot 3.2.0和Spring AI 1.0.0-M4构建的智能合同审核系统。系统采用分层架构设计,整合DeepSeek API实现文档解析、条款提取和风险分析功能。核心技术栈包括Spring AI、H2数据库、Apache POI/PDFBox等文档处理工具,实现了合同条款语义分析、异常识别和审核报告自动生成。项目解决了传统人工审核效率低、主观性强等问题,为合同管理提供了智能化解决方案。文章详细阐述了系统架构设计、技术选型

博客 654

【软考】系统集成项目管理工程师(一)信息化知识

软考中级——系统集成项目管理工程师备考干货第一章:信息化知识。

商务合作 | 共同学习 | 携手共进 9万+

java 泛型常用的方法_JAVA-初步认识-常用对象API(集合框架-泛型-泛型方法)

一.刚才说了一下泛型类,现在准备说另外一个,在工具类的基础上演示一下(基于上一节的泛型工具类)。 本来如果是显示和打印String类的方法,参数中直接表明String类型即可,但是如果想显示和打印Intrger类型的参数,那么就需要将参数改为object。基于泛型工具类,书写可以是下面这样的。工具类里面指定什么类型,方法就跟着操作什么类型。 这样书写是否行得通,来演示一下, 传递String类型...

weixin_39534395的博客 125

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JAVA高级进阶03面向对象:内部&泛型&常用API

什么是内部类内部类是类中的五大成分之一(成员变量、方法、构造器、代码块、内部类)如果一个类定义在另一个类的内部,这个类就是内部类场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类内部类分为四种成员内部类[了解]:位于一个类里面成员位置的类静态内部类[了解]:使用static修饰的成员内部类局部内部类[了解]:在方法里面定义的类匿名内部类[重点]:一种特殊的局部内部类。

2402_84667776的博客 1328

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java基础——常用对象API(4):集合框架4:泛型

泛型:< >,里面放一个用于接收具体引用数据类型的参数范围。 是jdk1.5出现的安全机制,用于编译时期。 好处: 1.将运行期间的问题ClassCastException转到了编译时期。 2.避免了强制转换的麻烦。 泛型的擦除:运行时,会将泛型去除,生成的class文件中是不带泛型的,主要是为了兼容运行的类加载器。ff泛型的补偿:通过获取元素的类型(getClass)自动进行转换,不用使用者强制转换。 ...

zhangbinren的博客 189

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java学生类的泛型集合_JAVA-初步认识-常用对象API(集合框架-泛型-泛型类)

一.泛型我们了解完基本原理之后,除了在集合中用来传递参数类型外,还有其它的应用。它还能为我们提供很多设计上的便捷。介绍一下以前和现在的定义方法,有什么不一样。这里面为了方便于应用,搞了一个工具类,和主要的程序分开发。对工具类的描述,现在要操作person,要用工具类对person对象进行操作,可以完成person对象的设置和获取。 这个工具类只能操作person,不能操作其它对象。如果想要其它对象...

weixin_33210666的博客 236

JAVA-初步认识-常用对象API(集合框架-泛型-泛型方法)

一. 刚才说了一下泛型类,现在准备说另外一个,在工具类的基础上演示一下(基于上一节的泛型工具类)。 本来如果是显示和打印String类的方法,参数中直接表明String类型即可,但是如果想显示和打印Intrger类型的参数,那么就需要将参数改为object。 基于泛型工具类,书写可以是下面这样的。工具类里面指定什么类型,方法就跟着操作什么类型。 这样书写是否行得通,来演示一下,...

weixin_30832143的博客 151

Java开发学习day03-面向对象-内部类&泛型&常用API

泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。包装类(Wrapper Classes)在Java中为基本数据类型提供了对应的类类型。它们的存在主要是为了解决基本类型与对象之间的一些不兼容问题,以及提供一些面向对象的特性。

2403_86799396的博客 1699

JAVA-初步认识-常用对象API(集合框架-泛型-泛型接口)

一. 什么叫泛型接口呢?之前的例子中创建了那么多类,很麻烦。 对截图的理解首先是,接口是抽象出来的类,声明之后,下面的类要进行实现。接口中的方法是实现的类都具备的。这里将接口和泛型结合起来。前面的章节中,是将泛型和类,方法结合起来。 泛型定义在类上,就是泛型类,定义在接口上,就是泛型接口。(接口定义了,肯定要实现) 这里是在一个程序中将要表达的意思全部书写出来了,定义接口,...

weixin_30802273的博客 121

JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限)

一. 泛型的基本使用已经说完了,泛型类,泛型接口和泛型方法的体现也已经讲述完了。现在讲述一下,泛型的高级使用。 来一个String,定义一个集合,里面存储的全都是字符串,那我们就明确类型。明确完之后,就导一个包,采用add方法往里面传递几个字符串。 接着对它进行遍历,遍历的时候类型也是字符串, 运行的时候没有问题,非常简单。 但是有一个问题,集合不唯一。其实就是介绍各种不同的情...

weixin_30794491的博客 98

JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限的体现)

一. 现在要说应用,查看一下API中的注释, 这里有一个方法addAll里面有extedns E,我们看一下这个方法什么时候用。下面这三个集合,有存储person,student,还有worker的。 再接下来演示一下这个高级应用,如果我们要去想定义一下集合的话,(描述一下集合) 这个类里面加入的元素不确定的情况下,写的是个E,明确什么类型,add方法中添加的也是什么类型。一次...

weixin_30655219的博客 102

java 类型用波浪线_JAVA-初步认识-常用对象API(集合框架-泛型-泛型类)

一.泛型我们了解完基本原理之后,除了在集合中用来传递参数类型外,还有其它的应用。它还能为我们提供很多设计上的便捷。介绍一下以前和现在的定义方法,有什么不一样。这里面为了方便于应用,搞了一个工具类,和主要的程序分开发。对工具类的描述,现在要操作person,要用工具类对person对象进行操作,可以完成person对象的设置和获取。这个工具类只能操作person,不能操作其它对象。如果想要其它对象,...

weixin_31264951的博客 1053

Java语言基础-常用对象API(二)泛型、Map集合

泛型 是JDK1.5出现的安全机制。 好处:1.将运行时期的问题ClassCastException转到了编译时期;2.避免了强制转换的麻烦; <> 什么时候用? 当操作的引用数据类型不确定的时候,就使用<>,将要操作的引用数据类型传入即可。<>就是一个用于接收具体引用数据类型的参数范围。 在程序中,只要用到了带有<>的类或者借...

weixin_30412013的博客 124

JAVA-初步认识-常用对象API(集合框架-泛型-概述)

一. 学习一下,使用集合过程中,所涉及的JDK1.5以后所发生的技术,叫做泛型。可以从字面直译,广泛的类型。 首先介绍一下泛型的由来,技术的由来是为了解决问题的。 之前在讲述集合时,演示了很多小示例,现在在这些的基础上,阐述泛型的概念。 例子中为什么要强转?因为add方法它的类型是object,这个方法在定义的时候是object类型,publicbooleanadd(objec...

weixin_30617561的博客 120

JAVA-初步认识-常用对象API(集合框架-泛型-擦除补偿)

一. 接下来说一个泛型的原理部分,上一节交代了泛型的定义和使用了。泛型提供了安全性,java分两个部分,编译和运行,提高了编译的安全性,正因为编译时检查完了,运行时才没事。它是用在编译时期的安全技术。 泛型是编译时期的技术,给编译器用的, 加尖括号是要在编译时期用的,我要在源代码里把类型写好,编译器开始检查对不对。一检查对了,就通过了。 运行的时候,要靠虚拟机启动类装载器,专门读取...

weixin_30267697的博客 113

Java从入门到精通 - 面向对象高级(三)

本文介绍了Java中的枚举和泛型两大高级特性。在枚举部分,重点讲解了枚举类的定义格式、特点及使用场景,包括枚举类作为特殊类的特性(构造器私有、不可继承、包含常量对象等),以及枚举在信息分类和参数传递中的应用优势。泛型部分阐述了泛型的概念与作用,通过ArrayList示例展示了泛型在编译时类型检查、避免强制转换的优势。全文通过代码演示了枚举实现单例模式、抽象枚举等实用技巧,以及泛型类的基本用法,强调枚举和泛型在提升代码可读性和安全性方面的重要价值。

xian_x_的博客 768

JAVA-初步认识-常用对象API(集合框架-泛型-在集合中的应用)

一. 现在借助一个示例,将涉及的泛型内容说一下。 例子里面无非就是一个集合和迭代器。 list里面大概都是这样的,无非是一个迭代器和一个集合。我们讲一个更多一点的,hashset没有必要多说了,意义不太大,和这个是一样的。有一个是不一样的, 就是treeset,它里面带着比较器,带着比较功能。 接着演示,还是泛型。存储一些自定义对象,这就意味着要搞第二个包,这个包里面可以通过快捷操作...

weixin_30414635的博客 124
上一篇: 30 个java编程技巧(最佳实践的初学者)
下一篇: 关于Java集合的一些技巧
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值