请帮忙解释下这个泛型问题,具体逻辑我都下在代码注释里面了
public class Test01 {
public static void main(String[] args) throws Exception{
ArrayList<Integer> arr1=new ArrayList<Integer>();
ArrayList<String> arr2=new ArrayList<String>();
//下面打印出来true,证明泛型只是编译器级别的一个东西,加载到内存还是一样的
System.out.println(arr1.getClass()==arr2.getClass());
//那么可以用跳过编译器用反射直接加入不通类型的东西,测试打印出"dodo"字符串
arr1.add(55);
arr1.getClass().getMethod("add", Object.class).invoke(arr1, "dodo");
System.out.println(arr1.get(1));
//既然如此那么下面这个也应该能正确打印,但是报异常异常为: java.lang.ClassCastException
arr2.add("why");
arr2.getClass().getMethod("add", Object.class).invoke(arr2, 33);
System.out.println(arr2.get(1));
}
}
分享到:
相关推荐
泛型类是具有一个或多个类型参数的类。类型参数是在定义类时使用的占位符,实际的类型在创建类的实例时指定。例如,我们可以创建一个名为`GenericContainer<T>`的泛型类,其中`T`就是类型参数。这个类可以存储任何...
C#泛型是.NET框架中的一个强大特性,它允许我们创建可重用的类型,这些类型可以在多种数据类型上工作,而无需重复编写相同代码。泛型的主要目标是提高代码的类型安全性和性能,同时减少类型转换的需要。在本文中,...
当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,它们接受不止一个类型作为参数。这样的设计可以让我们在不同数据类型之间建立更复杂的关联,同时保持类型安全。 首先,让...
为了理解JVM如何处理泛型,我们需要了解一个重要的概念:“类型擦除”(Type Erasure)。类型擦除是指编译器在编译过程中去除所有泛型信息的过程。这一过程使得JVM不必直接支持泛型,因为所有泛型信息在编译后都被...
此外,文件名`Java.jpg`可能表示的是一个与这个泛型例子相关的图片,可能是一个截图或者示意图,用于帮助理解泛型的概念或者`MyFirstGeneric`类的结构和用法。在实际学习过程中,视觉辅助工具往往能够帮助我们更好地...
综上所述,理解和熟练运用C#中的泛型集合对于任何C#初学者来说都是至关重要的。通过掌握List、Dictionary, TValue>等泛型集合的使用,以及类型约束和泛型接口的概念,开发者能够编写出更安全、高效且易于维护的代码...
这个声明定义了一个泛型类 List,其中 T 是一个类型参数。这个泛型类可以实例化为不同的类型,例如 List、List<string> 等。 2. 类型参数 类型参数是一个简单的标识符,它指示了用来创建一个构造类型的类型参数的...
Java泛型是Java编程语言中的一个重要特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和可复用性。本文旨在深入解析Java泛型的各个方面,帮助开发者形成全面、清晰的理解。 1. **泛型基础*...
泛型是C#编程语言中的一个重要特性,自C# 2.0版本开始引入,它极大地提升了代码的重用性和效率。本专题将深入探讨泛型的原理和优势,以及如何利用它们来优化代码。 首先,泛型允许我们在定义类、接口、委托和结构时...
例如,可以定义一个泛型方法,使其能接受不同类型的参数并返回不同类型的值。 9. **类型推断** - 自JDK 7起,Java引入了类型推断,允许在某些情况下省略类型参数,编译器会根据上下文自动推断类型。 理解并熟练...
泛型类允许我们在定义类时指定一个或多个类型参数。例如,我们可以定义一个简单的泛型类 `Box`: ```java public class Box<T> { private T item; public void setItem(T item) { this.item = item; } public...
例如,`List<T>`就是一个泛型类,其中`T`代表一个未指定的类型,实际使用时可以是整型、字符串或其他自定义类型。 当我们想要在泛型中实现枚举功能时,可能的场景是在一个集合中存储一组特定类型的枚举值。例如,...
这个"3个泛型项目源码.rar"压缩包包含的三个项目,无疑为学习和理解泛型在实际项目中的应用提供了宝贵的资源。 泛型是C# 2.0引入的新特性,它允许开发者创建可以操作多种数据类型的类、接口和方法。这样做的好处...
泛型是Java编程语言中的一个重要特性,它引入了类型安全的概念,使得在编译时就能检查类型错误,而不是等到运行时。在类和方法上使用泛型,可以增强代码的可读性和复用性,避免类型转换的繁琐,并且提高了程序的效率...
例如,如果一个泛型类声明了类型参数`T extends Comparable<T>`,那么`T`必须是一个实现了`Comparable`接口的类型。这确保了使用该泛型类时,其内部操作能够正确地进行比较和排序。 自定义泛型类或算法时,开发者...
泛型编程的核心思想是参数化类型,即将数据类型作为一个参数传递给代码,使得代码能够适应不同类型的输入。 C++/CLI支持两种泛型机制:编译时泛型(基于ISO-C++模板)和运行时泛型(基于CLI泛型)。编译时泛型类似...
在C#编程中,泛型是一种强大的特性,它允许我们创建可重用的类型安全的代码,能够处理多种数据类型。"泛型封装.rar"这个...通过深入研究这个例子,开发者可以更好地理解和掌握C#中的泛型技术,提升代码质量和效率。