`
liugang594
  • 浏览: 981843 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java1.5新特性之泛型

JVM 
阅读更多
问题:集合元素类型
   1:不能在编译时被检测
   2:分派时必须被强制转换
 
还是那个原则,告诉编译器你的collection中需要什么类型,编译器为你完成一切(类型检查,转型等)。
看代码:
     ArrayList<String> a = new ArrayList<String>();
     a.add("hello");
     System.out.println(a.get(0)); 
//output:Hello
     System.out.println(strArrayList.getClass());
//output:class java.util.ArrayList
反编译后代码:
     ArrayList a = new ArrayList();
     a.add("hello");
     System.out.println((String)a.get(0));
     System.out.println(a.getClass());
实际上包括转型等都是javac帮我们做了。
从上面的代码中我们还能看出问题:看紫色标记的代码,我们打印a的类型,该变量在声明的时候是ArrayList<String>类型
的,我们的头脑里会认为打印出的应该是“class java.util.ArrayList<String>”,可实际打印出的信息告诉我们
collection中的元素的类型信息被丢弃了。也就是说ArrayList<Integer>和ArrayList<String>本不该是同一类型,不过我们
看到的实际情况却是他们是同一类型。由于java中的generic只是在compiler一级得到支持,在jvm一级是不知道有generic这
回事的。
 
一个参数化的类或接口声明定义一个集合类型,其中的每个元素都可能是该类型参数的一个实例化片段。所有参数化类
型在运行时共享同样的类或接口。如:
          Vector<String> x = new Vector<String>();
          Vector<Integer> y = new Vector<Integer>();
          return x.getClass() == y.getClass();
结果为:true
注:1、有了泛型的存在,在取元素的时候不用进行强制类型转换,系统会在编译时进行类型检测!
    2、指定的类型不能是原始类型!(目前不被支持)
    3、假设A是B的子类,我们声明了一个泛型声明G<A>和G<B>,此时不能认为G<A>是G<B>的一个子类型!这会引发一些问题
    3、在定义集合等时声明了类或接口的类型则限制了该集合能加入的类型!如在一个声明为Integer类型的集合 
  中加入String类型,则提示:
The method add(Integer) in the type of ArrayList<Integer> is not applicable for the arguments (String)
   3:可能造成运行时异常或错误(类转换异常 )
分享到:
评论

相关推荐

    jdk1.5新特性,泛型,for:each

    Java开发工具包(JDK)1.5是一个重要的版本,引入了多项显著的改进和新特性,极大地提升了Java编程的效率和灵活性。其中,泛型和foreach循环(也称为增强for循环)是两个核心的更新。 **泛型(Generics)** 泛型是...

    jdk1.5的新特性泛型的实例代码

    Java开发工具包(JDK)1.5引入了一项重大改进,那就是泛型(Generics)。泛型是Java编程语言中的一个关键特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。通过泛型,...

    java 1.5泛型详解

    Java泛型是自Java 1.5版本引入的一项重要特性,极大地提高了代码的类型安全性和重用性。本文将深入探讨Java泛型的概念、优点、使用方式及其在实际开发中的应用。 **一、泛型的基本概念** 泛型是Java语言中的一种...

    JAVA1.5安装包

    泛型是Java 1.5最重要的特性之一,允许在类、接口和方法中使用类型参数。泛型提高了代码的类型安全性和可读性,减少了类型转换的必要,并防止了运行时的ClassCastException。 2. **枚举(Enums)** Java 1.5引入...

    最新JAVA1.5中文API

    在这个"最新JAVA1.5中文API"中,开发者可以找到全面的文档,帮助理解并利用这些新特性进行编程。 首先,让我们来探讨一些Java 1.5中的关键更新: 1. **泛型(Generics)**:这是Java 1.5最显著的变化之一,允许在...

    java 1.5的新特性

    泛型是Java 1.5引入的关键特性之一,它允许我们在集合类中指定元素的类型。在泛型的帮助下,编译器可以在编译时进行类型检查,从而避免了运行时的类型转换异常。例如,可以创建一个只包含String类型的集合`...

    Java1.5泛型指南中文版

    Java 1.5 引入了泛型(generics)这一强大的特性,旨在提升类型安全性,减少类型转换的烦恼,并优化代码的可读性。泛型允许我们在编程时指定容器(如列表、队列等)所容纳对象的类型,从而在编译阶段就能捕获类型...

    java_泛型类相关介绍.docjava_泛型类相关介绍.doc

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。  Java语言引入泛型的好处是...

    java1.5api

    Java 1.5 API,也被称为Java SE 5.0(Java Standard Edition 5.0),是Java发展历程中的一个重要里程碑,引入了许多新特性和改进,为开发者提供了更强大的工具和功能。JavaScript API虽然在此描述中一同提及,但它们...

    Generic_2(泛型类-泛型方法-泛型接口-泛型限定(上限)

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...

    Java1.5的新特性

    Java 1.5,也被称为Java SE 5.0,是Java发展历程中的一个重要版本,它引入了许多新特性和改进,极大地提升了编程效率和代码的可读性。以下是对这些新特性的详细解释: 1. **静态导入(Static Import)** 静态导入...

    java1.5API

    1. **泛型(Generics)**:泛型是Java 1.5最显著的改进之一。它允许开发者在类、接口和方法中定义类型参数,提高了代码的类型安全性,避免了强制类型转换,同时增强了代码的重用性。 2. **枚举(Enums)**:Java ...

    java1.5新特征

    Java 1.5 是一个重要的版本更新,引入了许多新特性,极大地提升了开发效率和代码质量。以下是对这些新特性的详细解释: 1. **自动装箱与拆箱**: 自动装箱是指将基本数据类型(如 int、char 等)自动转换为对应的...

    Generic_3(泛型限定(下限)-泛型限定(上限的体现)-泛型限定(下限的体现)-泛型限定(通配符的体现)-集合查阅的技巧)

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...

    jdk1.5新特性关于动态参数,泛型等

    在 JDK 1.5 中,Java 语言引入了一系列重要的新特性,极大地提升了代码的可读性、安全性以及效率。以下是对这些新特性的详细解析: 1. 泛型(Generics) 泛型是 JDK 1.5 最重要的改进之一,它允许在定义集合类时...

    详细描述jdk1.5新特性

    jdk1.5新特性 泛类型和泛型方法是Java5.0 中的新特性。一种泛类型用一个或多个泛型变量定义,可以有一个或多个,泛型变量做参数占位符或做返回值 的方法。

    Java 1.5 反射机制

    Java 1.5引入的反射机制是其动态性的一个重要体现,它允许程序在运行时检查和操作类、接口、对象及其方法。反射为开发者提供了强大的能力,可以在不知道具体类名的情况下实例化对象,调用方法,访问字段,以及处理...

    JAVA API1.5中文帮助文档

    Java API 1.5,也被称为Java SE 5.0,引入了许多重要的新特性和改进。首先,泛型的引入是Java编程的一个重大革新,它允许在编译时检查类型安全,减少了运行时的类型转换异常。泛型在集合框架中得到了广泛的应用,如...

Global site tag (gtag.js) - Google Analytics