上回也在javaeye看了一篇文章,讲的是ArrayList泛型,不过不是普通的add,而是通过
反射来加入对象。
先把代码贴出来
public class Test01 {
public static void main(String[] args) throws Exception{
[color=red]ArrayList<Integer>[/color] arr1=new ArrayList<Integer>();
[color=red]ArrayList<String>[/color] arr2=new ArrayList<String>();
//下面打印出来true,证明泛型只是编译器级别的一个东西,加载到内存还是一样的
System.out.println(arr1.getClass()==arr2.getClass());//一样把
//那么可以用跳过编译器用反射直接加入不通类型的东西,测试打印出"dodo"字符串
arr1.add(88);
arr1.getClass().getMethod("add", Object.class).invoke(arr1, "dodo");
System.out.println(arr1.get(1));//打印出来dodo
System.out.println(arr1.get(0) instanceof Integer);//true
System.out.println(arr1.get(1).toString());//报错(可能是在使用方法的时候,强制转换成Integer就报错了)
//既然如此那么下面这个也应该能正确打印,但是报异常异常为: java.lang.ClassCastException
arr2.add("why");
arr2.getClass().getMethod("add", Object.class).invoke(arr2, Integer.valueOf(33));
System.out.println(arr2.get(1));//就报错,可能是arr2.get(1)转换成string报错
}
}
注意:红色的不能换掉
请大家发表下自己的看法。(额,这断代码,是我前几天看地,忘记URL了,抱歉)
arr1通过反射加入字符串的时候没事,但是提取出来,使用方法的时候就报错
arr2不能通过反射来加入整形
分享到:
相关推荐
在C#编程中,数组、ArrayList和泛型List都是用来存储一组对象的数据结构,但它们各有特点和适用场景。下面将详细对比这三种数据结构。 首先,数组(Array)是最基本的数据结构,用于存储固定数量且同类型的元素。在...
在泛型中,如果尝试向泛型容器添加不匹配的类型,编译器会报错。然而,通过反射或构造旧版本API的方式,仍然可能存在创建“野指针”(即不匹配类型的引用)的风险,这被称为类型擦除的副作用。 9. 有限的多态性 ...
在这个".NET中的泛型示例"中,我们将探讨ArrayList、List、Hashtable以及Dictionary, TValue>等泛型类型的使用。 1. ArrayList:虽然ArrayList是.NET早期版本中常用的动态数组,但它并不支持泛型。这意味着在...
泛型中不能直接使用基本数据类型,如`int`、`float`、`double`等,因为泛型机制需要的是对象类型。不过,Java为每一种基本数据类型都提供了一个对应的包装类,例如`Integer`对应于`int`,`Float`对应于`float`。在...
### Java中的泛型 #### 什么是泛型? 泛型是Java SE 5.0中引入的一项新特性,它允许在程序设计中使用参数化类型,从而实现类型安全的集合类和其他容器类。在使用泛型之前,Java程序员通常依赖于Object类型作为通用...
下面我们将详细讨论如何在Excel中提取泛型数据,并将这些数据存入泛型的List中。 首先,我们要理解什么是泛型。泛型是Java和C#等现代编程语言中的一种特性,允许在数据结构(如List)中指定元素类型。这样做可以...
在Java中,集合框架主要包括接口(如List、Set、Queue)和实现这些接口的类(如ArrayList、HashSet、LinkedList等)。这个框架允许我们高效地处理各种数据结构,而无需从头开始编写代码。泛型则是Java 5引入的一项...
在"ArrayListDemo"这个示例中,我们可能看到了如何从传统的ArrayList转换到使用泛型集合List的过程。ArrayListDemo可能包含以下步骤: 1. 创建ArrayList实例并填充数据。 2. 遍历ArrayList,演示类型转换的必要性。...
9. **集合框架中的泛型**:Java集合框架广泛使用了泛型,如ArrayList、LinkedList、HashMap等。使用泛型,可以确保集合只存储特定类型的元素,避免了不兼容类型的元素混入集合中。 10. **Erasure和类型安全**:尽管...
* 泛型中有继承的概念吗? * ArrayList<Integer> al2=new ArrayList(); //1 al2.add(new Integer(10));//2 Integer i2=al2.get(0);//3 ArrayList<Object> alO=al2;// 这样可以吗? * 如果说 ArrayList<Integer> 是一...
泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的重用性。下面将详细解释Java泛型的基本概念、使用方式以及相关的知识点。 1. 泛型的基本...
在C#中,System.Collections和System.Collections.Generic命名空间提供了各种集合类,如ArrayList、LinkedList、Queue和Stack等。然而,这些非泛型集合存在一些局限性,比如类型转换的开销和安全性问题。 泛型集合...
泛型集合(如`List<T>`)与非泛型集合(如`ArrayList`)相比,提供了更好的类型检查和性能。泛型集合避免了非泛型集合中的类型转换开销。 综上所述,C#泛型是一个强大的工具,它提高了代码的灵活性、复用性和效率...
在Java中,泛型主要应用于集合框架,如ArrayList、LinkedList、HashMap等。在使用泛型前,集合可以存储任何类型的对象,但在访问集合元素时,需要手动进行类型转换,这可能导致运行时错误,如ClassCastException。而...
非泛型集合主要位于 `System.Collections` 命名空间中,包括但不限于 `ArrayList`, `Hashtable`, `Queue`, `SortedList`, `Stack` 等。这些集合在设计之初并未考虑到类型安全性的问题,因此它们只能存储 `object` ...
本文将深入探讨Java泛型的概念、优点、使用方式及其在实际开发中的应用。 **一、泛型的基本概念** 泛型是Java语言中的一种参数化类型,它允许在定义类、接口和方法时使用类型参数,从而实现数据类型的模板化。通过...