Java泛型的学习笔记[1]—基础知识

简介: 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。本文主要描述的是 泛型类

   Java语言引入泛型的好处:1)最大程度的保证了类型安全;2)简化编译

   我们以ArrayList类为例:

   1)如果没有泛型,我们要不然需要为每一种类型X编写一个XArrayList类;要不然在ArrayList中用Object的对象来存储数据,然后每次取出对象时使用类型转换;

           2)而我们使用了泛型方式来定义ArrayList:public class ArrayList<T>{}  ,既保证了每次使用ArrayList时的类型安全,又简化了实现ArrayList的编程工作。

   好了,下面我们还是先抛出泛型类的概念和特性:

基础概念:

   泛型类实际就是一个带参数的类。泛型类定义可以有多个泛型参数,中间用逗号隔开。泛型的概念也存在于C++和C#语言中。如同如下代码:

public class MyList<T> {
	private List<T> list=new ArrayList<T>();
	public T get(int index){
		return list.get(index);
	}
	//此处省略了若干内容....
}

受限制的泛型类定义:
  假设我们定义了以下三个类:

   

  现在我就想专门针对上述三个类编写一个List类,则如下代码如示:

public class MyList<T extends Animal> {
	private List<T> list=new ArrayList<T>();
	public T get(int index){
		return list.get(index);
	}
	//此处省略了若干内容....
}

 

  如此的话,就可以将MyList的类参数的使用限制在Animal及其子类了。如果违反这个规则,编译期就会报错的。这样,就很大程度上保证了类型安全。

  MyList<Object> list=null;//编译出错

通配符泛型:
  有时在使用泛型类时,遇到不太确定参数的类型,可以用?代替。尤其是在做Java反射时:

  Class<?> clazz=Class.forName(className);

  受限制的通配符类型:但有时,你虽然不能确定类参数的具体类型,但是你能确定它大概的类型,比如该参数类型是Animal或者是其子类。

  此时可以这样用:Class<? extends Animal> clazz=Class.forName(className);

       需要注意的是:通配符不仅可以向下限制[通配符代表某类型或某类型的子类],还可以向上限制[通配符代表某类型或是某类型的父类]

  比如:Class<? super Cat>  clazz=Class.forName(className);//表示?代表的是Cat或Cat的基类Animal

  当然,还有一些其它的例子来描述通配符:

  比如定义一个变量:List<? extends Animal> animals=new ArrayList<Cat>();

      本人写作功底不行,请见谅。

  下一文:关于泛型的实际使用及使用中遇到的问题

相关文章
|
14天前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
1月前
|
Java
java中的泛型类型擦除
java中的泛型类型擦除
13 2
|
21天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【4月更文挑战第5天】 在现代软件开发中,多线程编程是一个不可或缺的技术要素。它允许程序员编写能够并行处理多个任务的程序,从而充分利用多核处理器的计算能力,提高应用程序的性能。Java作为一种广泛使用的编程语言,提供了丰富的多线程编程支持。本文将介绍Java多线程编程的基础知识,并通过实例演示如何创建和管理线程,以及如何解决多线程环境中的常见问题。
|
2天前
|
IDE Java 开发工具
Java从入门到精通:1.3.1实践编程巩固基础知识
Java从入门到精通:1.3.1实践编程巩固基础知识
|
2天前
|
存储 安全 Java
每日一道Java面试题:说一说Java中的泛型?
今天的每日一道Java面试题聊的是Java中的泛型,泛型在面试的时候偶尔会被提及,频率不是特别高,但在日后的开发工作中,却是是个高频词汇,因此,我们有必要去认真的学习它。
13 0
|
2天前
|
Java
Java基础知识整理,驼峰规则、流程控制、自增自减
在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。
34 3
|
2天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
37 11
|
13天前
|
存储 监控 安全
泛型魔法:解码Java中的类型参数
泛型魔法:解码Java中的类型参数
33 0
泛型魔法:解码Java中的类型参数
|
15天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
26天前
|
关系型数据库 Java 开发工具
Java入门高频考查基础知识9(15问万字参考答案)
本文探讨了Spring Cloud的工作原理,包括注册中心的心跳机制、服务发现机制,以及Eureka默认的负载均衡策略。同时,概述了Spring Boot中常用的注解及其实现方式,并深入讨论了Spring事务的注解、回滚条件、传播性和隔离级别。文章还介绍了MySQL的存储引擎及其区别,特别关注了InnoDB如何实现MySQL的事务处理。此外,本文还详细探讨了MySQL索引,包括B+树的原理和设计索引的方法。最后,比较了Git和SVN的区别,并介绍了Git命令的底层原理及流程。
32 0
Java入门高频考查基础知识9(15问万字参考答案)