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

java泛型类型擦除

 
阅读更多

 

先上一段代码,猜猜会出现的问题

 

 

	public void test(List<String> value){
		System.out.println("List<String> value");
	}
	public void test(List<Integer> value){
		System.out.println("List<Integer> value");
	}

 

 

很,不幸编译不通过,下面让我们来分析一下为什么。

 

真假泛型,早在java出现泛型之前,c#中存在泛型了,c#中的泛型无论在源码中还是编译后都是真实存在的(编译后是一个占位符),基于这种实现的泛型我们称之为真泛型。那么java呢,java的泛型只是存在源码中,javac编译后字节码中就被替换成原生类型,所以运行阶段List<String>与 List<Integer> 是同一类型,基于这种泛型实现的我们称之伪泛型。那么运行时类型是如何区分的呢,其实编译阶段在相应地方插入了强制转化类型代码。java中泛型实现方法称为泛型擦除。

 

 

分享到:
评论

相关推荐

    Java泛型类型擦除后的补偿

    本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...

    解析Java泛型的类型擦除.pdf

    在 Java 语言中,泛型类型擦除的机制使得开发者难以理解和使用泛型,例如,在 Java 中,我们可以定义一个泛型类 `ArrayList&lt;T&gt;`,其中 `T` 是类型参数,但是,在编译后的字节码文件中,泛型类型信息已经被擦除,所有...

    Java 泛型擦除后的三种补救方法

    然而,Java 的泛型在运行时是被擦除的,这意味着在运行时刻,所有的泛型类型信息都会丢失,无法直接用来创建对象或进行类型检查。这导致我们无法使用 `new T()` 或 `instanceof` 这样的操作。为了解决这个问题,我们...

    Java泛型擦除深度解析:原理、影响与编程实践

    然而,Java泛型的实现机制——类型擦除,也带来了一系列的问题和限制。本文将深入探讨Java泛型擦除的工作原理、它对编程的影响,以及在实际开发中的应对策略。 Java泛型的类型擦除机制是Java泛型实现的核心,它使得...

    Java 泛型总结(一):基本用法与类型擦除

    "Java 泛型总结(一):基本用法与类型擦除" Java 泛型是 Java 语言中的一种强大功能,它可以使代码更加简洁、安全。下面是对 Java 泛型的基本用法和类型擦除机制的介绍。 泛型的基本用法 ------------- 泛型是...

    java 泛型类的类型识别示例

    综上所述,虽然Java泛型在编译后会进行类型擦除,但通过上述技巧,我们仍然能够在运行时获得关于泛型类实例化类型的一些信息。在实际开发中,这些方法可以帮助我们编写更加灵活和安全的代码。在示例文件`GenericRTTI...

    java泛型、原始类型、桥接方法

    桥接方法是 Java 编译器生成的特殊方法,用于解决泛型类型擦除后可能出现的类型不匹配问题。在编译时,编译器会生成桥接方法,以便在泛型类型擦除后,仍然能够保留类型安全性。 例如,假设我们有一个泛型类 Pair,...

    很好的Java泛型的总结

    Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...

    关于C#、java泛型的看法

    另一方面,Java的泛型类型擦除带来了一定的灵活性,使得旧的无泛型代码能够与新的泛型代码兼容,这对于维护大型遗留项目尤其有利。然而,这也意味着Java开发者需要额外注意类型转换的安全性,避免出现...

    java泛型技术之发展

    - **类型擦除**:Java泛型采用了类型擦除的策略,这意味着在编译期间,泛型信息会被删除,只留下原始的无参数类型,这解决了与Java的向下兼容问题。 - **JDK 5.0引入**:Java 5.0正式引入泛型,使得在编译时期就能...

    Java泛型应用实例

    Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...

    java 泛型接口示例

    Java泛型在编译后会进行类型擦除,也就是说,所有的泛型信息在运行时都会消失。因此,虽然在编译期间我们能获得类型检查的好处,但在运行时,泛型接口和类的行为与无参数类型版本基本相同。 5. **通配符** 在某些...

    java泛型的内部原理及更深应用

    1. **类型擦除**:Java泛型的主要特点是类型擦除。这意味着在编译完成后,所有的泛型信息都会被擦除,替换为Object或者其他基础类型。因此,泛型在运行时并不存在,所有关于泛型的操作都在编译期间完成。 2. **边界...

    Java泛型与类型擦除

    这个过程由“类型擦除”实现。但是并非像许多开发者认为的那样,在 &lt;..&gt; 符号内的东西都被擦除了。看下面这段代码: public class ClassTest { public static void main(String[] args) throws Exception { ...

    java泛型深入.pdf

    在JVM内部,所有的泛型信息都会在编译时被擦除,这种机制被称为类型擦除(Type Erasure),即在虚拟机中泛型类型参数的任何信息都不保留,使得在运行时的性能不会受到影响。 类型擦除意味着`List&lt;String&gt;`和`List...

    java 泛型方法使用示例

    下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...

    Java泛型总结(2)进阶篇

    在本文中,我们将深入探讨Java泛型的进阶概念,包括通配符、边界、类型擦除以及在实际开发中的应用。 1. 通配符 通配符在Java泛型中扮演着重要角色,它允许我们处理多种类型的参数。例如,`&lt;?&gt;` 表示未知类型,...

Global site tag (gtag.js) - Google Analytics