`

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 大型OA管理系统

    java 大型OA管理系统 云网 java 大型OA管理系统 云网 java 大型OA管理系统 云网

    java 科学型计算器 代码

    java 科学计算器 包含sin cos 运算 相当实用的代码 初学java 的童鞋可以看看。哈哈

    (Java)科学型计算器的开发与实现.pdf

    (Java)科学型计算器的开发与实现.pdf(Java)科学型计算器的开发与实现.pdf(Java)科学型计算器的开发与实现.pdf(Java)科学型计算器的开发与实现.pdf(Java)科学型计算器的开发与实现.pdf(Java)科学型计算器的开发与实现...

    java生成唯一索引,Long型,区别uuid

    java生成唯一索引,Long型,区别uuid

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

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

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

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

    JAVA计算器(科学型+标准型)

    JAVA计算器(科学型+标准型) java 设计的

    java科学型计算器源码

    这是我用java编的一个科学型计算器,实现了混合运算,大整数运算,批运算,以及进制之间的相互运算,对于混合运算,算法有详细的注释。可供初学者学习以及课程设计参考使用。

    JAVA浮点型的加法

    BigDecimal ADD的用法

    Java 面经手册·小傅哥.pdf

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

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

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

    TimeUtil_java-long型与Date型时间转换工具

    java-long型与Date型时间转换工具

    JAVA_API1.6文档(中文)

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

    java源码包4

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

    java源码包3

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

    java计算器java计算器

    java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器java计算器

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    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 ...

    java笔记 java笔记

    java笔记java笔记,java笔记java笔记java笔记java笔记

    java源码包2

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

Global site tag (gtag.js) - Google Analytics