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>();

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

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

相关文章
|
3月前
|
安全 Java 编译器
揭秘JAVA深渊:那些让你头大的最晦涩知识点,从泛型迷思到并发陷阱,你敢挑战吗?
【8月更文挑战第22天】Java中的难点常隐藏在其高级特性中,如泛型与类型擦除、并发编程中的内存可见性及指令重排,以及反射与动态代理等。这些特性虽强大却也晦涩,要求开发者深入理解JVM运作机制及计算机底层细节。例如,泛型在编译时检查类型以增强安全性,但在运行时因类型擦除而丢失类型信息,可能导致类型安全问题。并发编程中,内存可见性和指令重排对同步机制提出更高要求,不当处理会导致数据不一致。反射与动态代理虽提供运行时行为定制能力,但也增加了复杂度和性能开销。掌握这些知识需深厚的技术底蕴和实践经验。
77 2
|
22天前
|
Java API
[Java]泛型
本文详细介绍了Java泛型的相关概念和使用方法,包括类型判断、继承泛型类或实现泛型接口、泛型通配符、泛型方法、泛型上下边界、静态方法中使用泛型等内容。作者通过多个示例和测试代码,深入浅出地解释了泛型的原理和应用场景,帮助读者更好地理解和掌握Java泛型的使用技巧。文章还探讨了一些常见的疑惑和误区,如泛型擦除和基本数据类型数组的使用限制。最后,作者强调了泛型在实际开发中的重要性和应用价值。
18 0
[Java]泛型
|
1月前
|
存储 安全 Java
🌱Java零基础 - 泛型详解
【10月更文挑战第7天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 1
|
1月前
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
27 5
|
1月前
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
18 1
|
2月前
|
Java 编译器 容器
Java——包装类和泛型
包装类是Java中一种特殊类,用于将基本数据类型(如 `int`、`double`、`char` 等)封装成对象。这样做可以利用对象的特性和方法。Java 提供了八种基本数据类型的包装类:`Integer` (`int`)、`Double` (`double`)、`Byte` (`byte`)、`Short` (`short`)、`Long` (`long`)、`Float` (`float`)、`Character` (`char`) 和 `Boolean` (`boolean`)。包装类可以通过 `valueOf()` 方法或自动装箱/拆箱机制创建。
37 9
Java——包装类和泛型
|
1月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
20 2
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)