`
风车车
  • 浏览: 1014 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

基础技能之泛型

阅读更多


定义:

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。


泛型本身不具备任何的方法。但是可以通过指定其父类,则泛型具有其父类的方法等。


代码示例:

 

//书
class Book{
	private	String name;
	public Book(String name) {
		this.name = name;
	}
	
	public String getName(){
		return name;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return name;
	}
}

//语文书
class ChinaBook extends Book{

	public ChinaBook(String name) {
		super("语文课本:" + name);
	}
	
}

//英语书
class EnglishBook extends Book{

	public EnglishBook(String name) {
		super("英语课本:" + name);
	}
	
}

class BookShop{
	private List<? super Book> books = new ArrayList<>();//不需要声明泛型
	   //进货
		public void addBook(Book b){
			books.add(b);			
		}
		
		//展示所有的book
		public List<? super Book> getAllBooks(){
			return books;
		}
}


class BookMarket<BK extends Book>{//可以用到泛型,并使用extends,指定其父类
	
	private List<BK> books2 = new ArrayList<>();//此种写法,必须是声明了泛型	
	//进货
	public void addBook(BK bk){
	
		books2.add(bk);
	}	
	
	//展示所有的book
	public List<BK> getAllBooks(){
		return books2;
	}
	
	public static void main(String[] args) {
		//泛型 -extends
		BookMarket bm = new BookMarket();
		bm.addBook(new ChinaBook("小学语文"));
		bm.addBook(new EnglishBook("高中英语"));
		
		//泛型super
		BookShop bs = new BookShop();
		bs.addBook(new ChinaBook("shop小学语文"));
		bs.addBook(new EnglishBook("shop高中英语"));
		
		

		System.out.println(bm.getAllBooks());
		System.out.println(bs.getAllBooks());
	}
}

 


如果你想从一个数据类型里获取数据,使用 ? extends 通配符。

    示例:  class A extends B{ ....} 

如果你想把对象写入一个数据结构里,使用 ? super 通配符。

    示例: list extends B&gt;  bs =  = new ArrayList();

               bs.add(B的子类的对象);


小结:

extends 可用于的返回类型限定,不能用于参数类型限定。

super 可用于参数类型限定,不能用于返回类型限定。





 

分享到:
评论

相关推荐

    java零基础入门-最新版2019(600元的课)

    1: Java基础语法 ...在本步骤中,将会介绍最常用的Java工具类,包括异常、包装器类、字符串处理类、集合框架及其实现类、泛型、多线程和输入输出流等内容。学习了这些,定让你的Java技能更上一层楼。

    朱老师C++课程第3部分3.3.STL的泛型算法使用详解

    涵盖了C++基础语法和使用,面向对象,STL与泛型,Boost库和设计模式,C++编程优化技巧等非常广泛的内容,是市面上非常缺少的深度完整学习C++,培养编程技能和修养的一套系列学习课程。整个课程预计2020年底前录制...

    涵盖了 Java 基础、集合、源码、并发、虚拟机、框架、数据库、网络编程、设计模式、新特性和数据结构等多个知识领域的面试突击

    Java核心技术:I/O、多线程、网络编程、反射、泛型等 Java虚拟机:内存模型、垃圾收集器、类加载机制等 Java企业级开发:Spring、Hibernate、MyBatis等框架原理 数据库和缓存:SQL优化、索引、Redis、Memcached等 分布式...

    2024年C#编程入门基础,开启你的编程之旅(10分钟).zip

    从C#的介绍和特点开始,逐步介绍了如何学习C#、C#的实际应用场景,以及C#的高级特性,如异步编程、LINQ、属性和泛型。此外,博客还提供了学习资源和进阶建议,如官方文档、在线教程、实践项目和加入社区。通过这个...

    Java面试题合集最新版2024.zip

    Java面试通常涵盖多个方面,包括Java基础知识、编程技能、问题解决能力,以及对Java生态系统和相关技术的理解。以下是一些建议的Java面试准备要点和资源描述: 一、Java基础知识 数据类型、变量与运算符:理解Java...

    Java核心技术 第12版 开发基础+高级特性 英文原版

    着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发...

    java技能总结.docx

    掌握Java语法和基础:掌握Java的语言特性、数据类型、运算符、控制结构、面向对象编程等基础知识点。 掌握Java标准库:掌握Java标准库中的重要类和接口,如String、ArrayList、HashMap、Thread、Socket等。 掌握Java...

    C#从现象到本质,随书源码。

    本书详细介绍用C#语言进行程序开发需要掌握的知识和技术。全书由浅入深分三大部分,...前言和附录分别给出.NET程序员开发职位要求、技能等级、进阶之路,以及面试宝典,可帮助开发者新人快速进阶,找到适合自己的工作。

    Swift核心技术与实战(课程+学习资料+视频讲解).rar

    高级特性应用:学习Swift语言的高级特性,如协议、泛型、错误处理等 实战项目开发:通过实战项目开发,学习Swift语言在iOS应用开发中的应用技巧和最佳实践 阅读建议: 系统学习:按照教程的顺序,系统学习Swift语言...

    .net技能表.txt

    C#基础(oop,IO,泛型,反射,多线程和异步,委托和事件,序列化,事务,windows服务,注册表,com,网络编程等) ado.net asp.net asp.net mvc winform(自带控件,自定义控件,dev控件,dotnetbar等) web ...

    Java高级工程师简历模板18k+

    1.具有扎实的Java基础,对面向对象编程有深刻的理解,熟练掌握java IO流、集合、多线程、反射,泛型,注解,网络编程等基础开发技术; 2.熟练使用常用的java集合类以及常用集合的源码,熟悉多线程以及同步容器以及...

    难得C++全栈!侯捷老师C++天龙八部合集+专业辅导 C++技能超级实战+算法实践+系统设计

    技术基础:操作符重载and模板(泛化, 全特化, 偏特化).mp4 ├─11. 分配器.mp4 ├─12. 容器之间的实现关系与分类.mp4 ├─13. 深度探索list(上).mp4 ├─14. 深度探索list(下).mp4 ├─15. 迭代器的设计原则和...

    新手学Java7编程(第5版)

    首先从基础讲起,介绍了如何编译和运行java程序,然后讨论了关键字、语法和一些结构,它们共同构成了java语言的核心。之后,《新手学java7编程(第5版)》介绍了java的一些高级特性,包括多线程程序设计和泛型。最后以...

    可视化程序设计(内含源代码)

    这些实验旨在帮助读者掌握C#编程的基本知识和技能,并为他们在软件开发领域中打下坚实的基础。 首先,C#语言基础实验旨在介绍C#语言的基本语法和编程环境,包括变量、运算符、流程控制语句、函数等。通过这些实验,...

    基于java的进销存或库存管理系统源码.zip

    Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。

    基于java的员工工作日志管理系统源码.zip

    Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。

    基于java的考勤管理系统源码.zip

    Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。

    基于java的javaweb实验室管理系统SSM V2源码.zip

    Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。

    基于java的医院在线挂号系统源码.zip

    Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。

Global site tag (gtag.js) - Google Analytics