`

java乏型

    博客分类:
  • java
 
阅读更多

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
Java语言引入泛型的好处是简单安全:在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String");

Demo: 泛型与Object对比示例。

泛型类的语法说明:
         使用<T>来声明一个类型持有者名称,就可以把T当作一个类型代表来声明成员、参数和返回值类型。T仅仅是个名字,这个名字可以自定义。
声明
         class GenericsFoo<T> 声明了一个泛型类,这个T没有任何限制,实际上相当于Object类型,实际上相当于 class GenericsFoo<T extends Object>。
使用
        与Object泛型类相比,使用泛型所定义的类在声明和构造实例的时候,可以使用“<实际类型>”来一并指定泛型类型持有者的真实类型。比如
  GenericsFoo<Double> douFoo=new GenericsFoo<Double>(new Double("33"));
        当然,也可以在构造对象的时候不使用尖括号指定泛型类型的真实类型,但是你在使用该对象的时候,就需要强制转换了。比如:
           GenericsFoo douFoo=new GenericsFoo(new Double("33"));
         实际上,当构造对象时不指定类型信息的时候,默认会使用Object类型,这也是要强制转换的原因。

 为了解决类型被限制死了不能动态根据实例来确定的缺点,引入了“通配符泛型”,针对上面的例子,使用通配泛型格式为<? extends Collection>,“?”代表未知类型,这个类型是实现Collection接口。那么上面实现的方式可以写为:
  public class CollectionGenFooDemo {
  public static void main(String args[]) {
  CollectionGenFoo<ArrayList> listFoo = null;
  listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
  //现在不会出错了
  CollectionGenFoo<? extends Collection> listFoo1 = null;
  listFoo=new CollectionGenFoo<ArrayList>(new ArrayList());
  System.out.println("实例化成功!");
  }
  }
  说明:
  1、如果只指定了<?>而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。
  2、通配符泛型不单可以向下限制,如<? extends Collection>,还可以向上限制,如<? super Double>,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。
         3、泛型类定义可以有多个泛型参数,中间用逗号隔开,还可以定义泛型接口,泛型方法。这些都泛型类中泛型的使用规则类似。
是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。如:
public class ExampleA {
   public <T> void f(T x) {
               System.out.println(x.getClass().getName());
 }
}
使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。

分享到:
评论

相关推荐

    java科学型计算器源码

    Java科学型计算器源码是一个为初学者和课程设计者提供的编程实践项目,它涵盖了多个重要的IT知识点,特别是针对Java编程语言。在这个项目中,开发者实现了一个功能强大的计算器,能够处理复杂的数学运算,包括: 1....

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    JAVA_API1.6文档(中文)

    java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...

    Java双栈式科学型计算器

    本源码实现了Java双栈式科学型计算器,参考了Win10附件中科学型计算器的功能。无GUI界面,改包名即可运行。

    大型项目J2EE金融源代码,仅供java深入开发学习

    它包含了Web组件(如Servlet和JSP)、企业Bean(EJB)、JMS(Java消息服务)、JTA(Java事务API)等关键组件,为复杂业务逻辑处理提供了强大的支持。 2. **金融系统特性**: 金融系统的特性包括高可用性、高性能、...

    JAVA面型对象编程19

    JAVA面型对象编程19

    主键是Long型的id生成方法,Java实现

    主键是Long型的id生成方法,Java实现.snowflake算法.

    Java 面经手册·小傅哥.pdf

    这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...

    Java学习资料-结构型设计模式 

    Java结构型设计模式 :Java结构型设计模式 ;Java结构型设计模式 ;Java结构型设计模式 ;

    [Java] Java 编程面试揭秘 英文版

    Java is a popular and powerful language that is a virtual requirement for businesses making use of IT in their daily operations For Java programmers this reality offers job security and a wealth of ...

    Java Language Specification(Java编程规范)中英文

    基本类型包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。引用类型则指向对象或数组的内存位置。 - **类与对象**:Java是一种面向对象的语言,类是创建对象的...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    JAVA API官方中文版手册chm文件文档

    JAVA API官方文档中文版软件包 java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd java.awt.event java.awt.font java.awt.geom java.awt.im java.awt.im.spi java.awt.image ...

    Java2Pas Java代码转pas代码

    Java2Pas是一个实用工具,主要用于将Java编程语言编写的源代码转换为Pascal语言的等效代码。这个工具对于那些需要在两种语言之间迁移代码或者理解不同编程语言语法的开发者来说非常有价值。Java和Pascal虽然都是面向...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    Java 中文入门学习手册合集[chm版]

    第一章 Java语言的产生及其特点 第二章 Java程序开发与运行环境 第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 第六章 Java图形用户接口 第七章 多线程 第八章 Java的"异常" 第九...

    java转js工具

    Java到JavaScript转换工具有助于开发者将已有的Java代码库移植到JavaScript环境中,这在Web开发中尤其有用,因为JavaScript是浏览器端的主要脚本语言。这样的工具能够帮助开发者利用Java的强大功能来构建前端应用,...

    JAVA API官方文档 中文版

    5. **数据库访问**:`java.sql`包提供了与关系型数据库交互的接口和类,如Connection、Statement、PreparedStatement等。 6. **反射**:`java.lang.reflect`包允许在运行时检查类和接口的结构,动态创建对象并调用...

    函数型Java计算器运行程序

    由 函数型Java计算器源码 所制作的运行程序 http://download.csdn.net/download/qq_32873321/10171257

    java 17 window 安装包

    Java 17是Java开发工具集(Java Development Kit)的一个主要版本,对于Windows操作系统提供了全面的支持。这个安装包是专为在Windows x64平台上运行和开发Java应用程序设计的。让我们深入了解一下Java 17以及如何在...

Global site tag (gtag.js) - Google Analytics