1.泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的 创建中,分别称为泛型类、泛型接口、泛型方法。
2.Java泛型被引入的好处是安全简单。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转 换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才 出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型在使用中还有一些规则和限制:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class classType = Class.forName(java.lang.String);
泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。
例子一:使用了Java泛型
------------------------------------------------------------------------------------------------
这里我用了javase1.6,但是还是出了错......具体错误以下,如果把错误改正的话,那么就不能发挥泛型的作用,还是需要强制类型转换这样就又出 现了安全问题
------------------------------------------------------------------------------------------------------
- publicclassGen{ //关键在这里,还是要加Gen<T>,不加会报错
-
privateTob;
-
publicGen(Tob){
-
this.ob=ob;
- }
-
publicTgetOb(){
-
returnob;
- }
-
publicvoidsetOb(Tob){
-
this.ob=ob;
- }
-
publicvoidshowTyep(){
-
System.out.println("T的实际类型是:"+ob.getClass().getName());
- }
- }
-
publicclassGenDemo{
-
publicstaticvoidmain(String[]args){
-
-
GenintOb=newGen(88);
- intOb.showTyep();
-
inti=intOb.getOb();//这里还是需要强制类型转换,不转换会报错
-
System.out.println("value="+i);
-
System.out.println("----------------------------------");
-
-
GenstrOb=newGen("HelloGen!");
- strOb.showTyep();
- Strings=strOb.getOb();//这里还是需要强制类型转换,不转换会报错
-
System.out.println("value="+s);
- }
- }
例子二:没有使用泛型
- publicclassGen2{
-
privateObjectob;
-
publicGen2(Objectob){
-
this.ob=ob;
- }
-
publicObjectgetOb(){
-
returnob;
- }
-
publicvoidsetOb(Objectob){
-
this.ob=ob;
- }
-
publicvoidshowTyep(){
-
System.out.println("T的实际类型是:"+ob.getClass().getName());
- }
- }
-
publicclassGenDemo2{
-
publicstaticvoidmain(String[]args){
-
-
Gen2intOb=newGen2(newInteger(88));
- intOb.showTyep();
-
inti=(Integer)intOb.getOb();
-
System.out.println("value="+i);
-
System.out.println("----------------------------------");
-
-
Gen2strOb=newGen2("HelloGen!");
- strOb.showTyep();
- Strings=(String)strOb.getOb();
-
System.out.println("value="+s);
- }
- }
运行结果:
两个例子运行Demo结果是相同的,控制台输出结果如下:
T的实际类型是:
- java.lang.Integer
-
value=88
- ----------------------------------
- T的实际类型是:java.lang.String
- value=HelloGen!
-
Processfinishedwithexitcode0
- ------------------------------------------------------------
分享到:
相关推荐
例如,`java -version`可以检查Java的安装版本,`javac HelloWorld.java`可以编译名为`HelloWorld.java`的源代码,`jar cvf HelloWorld.jar HelloWorld.class`则可以创建一个包含`HelloWorld.class`的JAR文件。...
Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...
Java反射API提供了获取泛型信息的方法,但需要注意的是,由于类型擦除的存在,这些信息可能不完全准确。例如,可以通过`ParameterizedType`获取泛型类的实际类型参数。 #### 总结 Java泛型为编程提供了极大的灵活...
Java泛型是Java语言中的一种重要机制,自从Java 1.5版本引入泛型以来,Java开发者可以更方便地编写类型安全的代码。泛型的引入解决了Java早期版本中类型不安全的问题,提高了Java语言的开发效率和安全性。 泛型的...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....
Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、枚举和注解的详细说明。这份"jdk-17.0.2_doc-all"文档集全面覆盖了Java 17.0.2版本的特性,是理解、学习和使用Java编程...
6. **类型推断改进**:Java 8增强了类型推断,使得编译器能更好地理解Lambda表达式和其他泛型上下文中的代码。 OpenJDK是Java的开源实现,由甲骨文公司发起,现在由全球开发者社区共同维护。OpenJDK包含了JDK的核心...
- 泛型擦除前的例子把这段Java代码编译成Class文件,然后再用字节码反编译后,將会发现泛型都不见了,又变回了Java泛型出现之前的写法,泛型类型都变回了原
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
java-泛型-面试题.docx
Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...
标题中的"jdk-1.7-java-7-openjdk-amd64.zip"表明这是一个Java开发工具包(JDK)的压缩文件,版本为1.7,适用于AMD64架构的Linux系统。OpenJDK是Java Development Kit的一个开源实现,由Oracle公司支持并维护。这个...
下面将详细解释Java泛型的基本概念、使用方式以及相关的知识点。 1. 泛型的基本概念: - 泛型是一种参数化类型,允许在定义类、接口和方法时使用类型参数,从而创建一种可以适用于多种类型的通用代码。 - 泛型的...
在Java开发中,Apache Commons库是一组非常重要的工具类库,它们提供了许多实用的功能,以增强Java的标准库。这里提到的三个JAR文件——`commons-beanutils.jar`、`commons-collections-3.1.jar`和`commons-pool-1.2...
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。...
Java JDK 1.8是Java开发工具包的一个重要版本,主要针对Linux x64平台设计。JDK(Java Development Kit)包含了开发和运行Java应用程序所需的所有工具和库,包括Java虚拟机(JVM)、编译器(javac)、类库以及用于...
《阿里巴巴Java编码规范2.1.1》是阿里巴巴开源的一款针对Java编程的代码规范指南,旨在提高代码质量、提升开发效率、确保代码可读性和可维护性。此规范被广泛应用于阿里巴巴集团及其关联公司,同时也成为业界参考的...
在本教程中,我们将深入探讨Java泛型的实现及其在实际编程中的应用。 泛型允许我们在类、接口和方法中定义类型参数,这样就可以在编译时检查类型安全,并且可以消除在运行时进行类型转换的需要。泛型的主要优点有:...