`
liugang594
  • 浏览: 990867 次
  • 性别: 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)** 泛型是...

    Java1.5泛型指南中文版

    Java 1.5引入了泛型(Generics)的概念,这是一个重要的语言特性,它允许开发者在编译时期指定集合或其他数据结构中的元素类型,从而避免了运行时期的类型转换错误。通过使用泛型,开发者可以在编程阶段就确保类型的...

    JAVA1.5新特性

    泛型是JAVA 1.5中最引人注目的特性之一,它允许开发者在类、接口或方法中声明类型参数,从而在编译时提供类型安全检查,避免了运行时的类型转换错误。在JAVA 1.4及更早版本中,集合框架只能存储`Object`类型的元素,...

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

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

    JDK1.5新特性泛型_深入研究.doc

    ### JDK1.5新特性泛型深入研究 #### 一、引言 随着软件工程的发展,类型安全成为了程序设计中的一个重要考量因素。Java作为一种广泛使用的编程语言,在其发展历程中不断引入新的特性以满足日益增长的需求。JDK1.5...

    jdk1.5新特性

    泛型编程是 Java 1.5 引入的一项重要特性,它允许开发者在编译时进行类型安全检查,从而避免了运行时可能出现的类型转换异常。通过在编译阶段检查类型安全,泛型有效地增强了代码的健壮性和可读性。 **示例对比:**...

    java 1.5泛型详解

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

    Java1.5泛型指南

    在Java 1.5版本中,引入了泛型(Generics)这一重要的特性,为类型安全性和代码重用性带来了革命性的改变。在此之前,开发人员在处理集合类时,如`List`或`Set`,往往需要进行显式类型转换,这不仅增加了代码的...

    JAVA1.5安装包

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

    java1.5泛型指南中文版

    自 JDK 1.5 起,Java 引入了一系列强大的新特性,以增强其编程能力和简化开发流程,其中“泛型”(Generics)是最重要的新增功能之一。本文将详细介绍 Java 泛型的概念、作用及使用方法,并通过示例来展示如何利用...

    jdk1.5新特性介绍

    - 泛型是JDK 1.5中最显著的新特性之一,它允许程序员在类型级别进行编程,从而提高代码的可读性和重用性,同时减少了强制类型转换的错误。 - 使用泛型可以避免运行时类型检查异常,并且使得集合操作更加安全。 2....

    JAVA 1.5 API 文档

    1. **泛型(Generics)**:这是Java 1.5最重要的特性之一,允许在定义类、接口和方法时使用类型参数,提高了代码的类型安全性,减少了类型转换错误。例如,List&lt;String&gt; 表示一个只包含字符串的列表。 2. **枚举...

    Java泛型编程指南.pdf

    - **引入时间**:Java 5(JDK 1.5)中引入了泛型的概念。 - **背景**:在引入泛型之前,Java使用原始类型来处理集合等数据结构。这种方式会导致类型安全问题,例如在运行时可能出现`ClassCastException`异常。 **...

    最新JAVA1.5中文API

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

    详细描述jdk1.5新特性

    ### 详细描述 JDK 1.5 新特性:泛型 #### 一、引言 Java 5.0(也称为 JDK 1.5)引入了一系列重要的新特性,这些特性极大地提高了开发者的编程效率和代码质量。其中最显著的特性之一便是泛型(Generics)。本文将...

Global site tag (gtag.js) - Google Analytics