`
C_SHaDow
  • 浏览: 51856 次
  • 性别: Icon_minigender_1
  • 来自: 大同
社区版块
存档分类
最新评论

泛型的类型擦除

 
阅读更多

当把一个具有泛型信息的对象赋给另一个没有泛型信息的变量时,所有在尖括号之间的类型信息都将被丢弃。这种擦除不仅会擦除使用该Java类时传入的类型实参,而且会擦除所有的泛型信息,也就是擦除所有尖括号里的信息。

import java.util.ArrayList;
import java.util.List;

public class ErasureTest {

	public static void main(String[] args) {
		Apple<Integer> a = new Apple<Integer>(6);
		for(String apple : a.getApples()) {
			System.out.println(apple);
		}
		Apple b = a;
		// 提示“不兼容的类型”编译错误
		for(String apple : b.getApples()) {
			System.out.println(apple);
		}
	}

}

class Apple<T extends Number> {
	T size;

	public Apple(T size) {
		this.size = size;
	}

	public String toString() {
		return "Apple[size=" + size + "]";
	}
	
	public List<String> getApples() {
		List<String> list = new ArrayList<String>();
		for (int i = 0; i < 3; i++) {
			list.add(new Apple<Integer>(10*i).toString());
		}
		return list;
	}
}
 
分享到:
评论

相关推荐

    Java泛型类型擦除后的补偿

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

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

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

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

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

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

    虽然这种机制带来了一些限制,如运行时类型错误、泛型类型参数不能是基本类型、无法创建泛型类型的实例、泛型类型参数不能使用instanceof、无法重载泛型方法等,但我们可以通过一些编程技巧来规避这些问题。...

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

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

    泛型,泛型擦除,桥接方法

    泛型擦除是指在编译时,Java 编译器将泛型类型参数擦除,替换为 Object 或其他类。例如,在编译时,`List&lt;String&gt;` 将被擦除为 `List`,使用 `Object` 作为类型参数。 桥接方法是指在子类中重写父类的方法时,Java ...

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

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

    JAVA泛型笔记.pdf

    2. 类型擦除:Java 编译器会将泛型类型擦除掉,替换为 Object 或者其他类型,这样可以实现向后兼容。 3. 边界:边界是指泛型类型参数的约束,例如 `&lt;T extends Number&gt;`。 泛型的使用场景 1. 集合类:Java 的集合...

    关于C#、java泛型的看法

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

    泛型类型转换Demo

    在"泛型类型转换Demo"中,可能涉及到不同泛型类型的赋值转换。例如,如果我们有一个`List&lt;Number&gt;`,我们可以通过类型转换将其赋值给`List&lt;Integer&gt;`,因为Integer是Number的子类。但是,这种转换只能在满足继承...

    Java泛型与类型擦除

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

    详解java 中泛型中的类型擦除和桥方法

    这样,泛型类型擦除保证不会为已参数化了的类型(paramterized types)产生新类,这样泛型能保证没有运行时的负载。 例如,下面的泛型类: ```java public class Node&lt;T&gt; { private T data; private Node&lt;T&gt; next...

    Java编程探索之泛型擦除实例解析

    可以看到,在编译后,泛型信息被擦除,所有的泛型类型都变成了原始类型 `ArrayList`。 泛型擦除的优点 泛型擦除有两个主要优点: 1. 提高了代码的可读性和可维护性,因为泛型信息在编译期被擦除,编译后的代码...

    Java-Edge#Java-Interview-Tutorial#Java语法糖之泛型与类型擦除1

    - 泛型擦除前的例子把这段Java代码编译成Class文件,然后再用字节码反编译后,將会发现泛型都不见了,又变回了Java泛型出现之前的写法,泛型类型都变回了原

    《java基础入门》第三版 第八章作业.doc

    Java中的类型擦除是指编译器在编译时将泛型类型擦除的过程。类型擦除可以提高代码的安全性和可读性,但也会带来一些限制。 ### 8.泛型的优点 泛型的引入提高了代码的安全性和可读性,消除了强制类型转换,提高了...

    java 泛型类的类型识别示例

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

    详解:泛型、擦除、边界

    5. 擦除:Java的泛型在编译后会被类型擦除,这意味着在运行时,所有的泛型信息都会丢失。但是,编译器会在源代码中插入适当的类型检查和转换,以确保类型安全。因此,尽管在运行时无法直接访问泛型信息,但编译时的...

    JDK 5.0中的泛型类型学习.docx

    总的来说,JDK 5.0中的泛型类型为Java提供了类型安全的容器,但其工作原理和限制(如类型擦除、非协变性以及构造延迟)需要开发者充分理解和掌握,以便正确、安全地使用泛型。在实际编程中,理解这些概念可以帮助...

    Java 泛型最全指南(定义和使用+继承泛型类/实现泛型接口+泛型的边界+通配符+类型擦除)

    Java 泛型详解 Java 泛型是 Java 5 中引入的一种编程技术,旨在提高代码的复用性和类型安全性。泛型允许开发者编写出“非特定类型”的代码,能够...但是,需要注意泛型的边界和类型擦除,以确保代码的正确性和安全性。

Global site tag (gtag.js) - Google Analytics