通过反射了解集合泛型的本质

通过反射了解集合泛型的本质
import java.lang.reflect.Method;
import java.util.ArrayList;
/**
 * 通过反射了解集合泛型的本质
 * @author shm
 *
 */
public class MethodDemo02 {
	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.add("hello");
		list.add(20);

		ArrayList<String> list1 = new ArrayList<String>();
		list1.add("hello");
		//list1.add(20);//这个加入是错误的:The method add(int, String) in the type ArrayList<String> is not applicable for the arguments (int)

		Class c1 = list.getClass();
		Class c2 = list1.getClass();
		System.out.println(c1==c2);
		//反射的操作都是编译后的操作

		/**
		 * c1=c2结果返回TRUE说明编译后集合的泛型是去泛型化的
		 * java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译后就无效了
		 * 验证:我们可以通过反射操作来绕过编译
		 */
		try {
			Method method = c2.getMethod("add", Object.class);
			method.invoke(list1, 20);
			System.out.println(list1);

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
时间: 2024-10-24 10:16:43

通过反射了解集合泛型的本质的相关文章

Java反射的理解(六)-- 通过反射了解集合泛型的本质

Java反射的理解(六)-- 通过反射了解集合泛型的本质 上述写了那么多,我们可能会有个疑问,为什么要用反射,步骤比我们常规的加载类操作复杂多了,别急,这个问题我最后才解答,我们先来了解集合泛型的本质. 直接上代码: import java.lang.reflect.Method; import java.util.ArrayList; public class MethodDemo4 { public static void main(String[] args) { ArrayList li

Java--Reflect(反射)专题6——通过反射了解集合泛型的本质

转载请注明:http://blog.csdn.net/uniquewonderq 通过Class,Method来认识泛型的本质 反射的操作都是编译之后的操作,即运行时刻进行操作 c1==c2结果返回true,说明编译之后,集合的泛型是去泛型化的 就是说编译之后这个集合没有泛型了. java中集合的泛型是防止错误输入的,只在编译阶段有效, 过了编译就无效了. 验证:我们可以通过方法的反射来操作,绕过编译 package com.test; import java.lang.reflect.Meth

java通过反射了解集合泛型的本质

reflect 反射结合集合泛型的总结

集合泛型: 可以放任何对象的 ArrayList  ArrayList list = new ArrayList();  没有限定泛型类型. list.add("lilin");list.add(100);System.out.println(list);//很容得知结果能够是["lilin",100]; ArrayList<String> list1 = new ArrayList<String>(); 限定了只能存放String类型的数据

通过Java反射来理解泛型的本质

集合框架中经常会使用泛型指定集合中所存放元素的类型,保证集合的统一性,从集合中取出元素的时候也避免了类型强制转换的操作,所以我们使用常规的方式来往集合中存放元素的时候,如果指定泛型,那么我们只能向集合内添加泛型类型的对象,如果不指定泛型,那么可以往集合中添加任何类型的对象,因为此时默认元素是Object类的对象,取出时也需要类型强制转换,就如下面代码: 1 ArrayList list = new ArrayList(); 2 list.add(1); 3 list.add("s");

【DAY12】第十二天集合&泛型&IO学习笔记

hash:散列 ------------------ Hashset集合内部是通过HashMap进行实现的.使用的是HashMap中key部分. 对象在添加进集合中时,首选会对hashcode进行处理(hashcode右移16位和 自身做异或运算)得到一个经过处理的hash值,然后该值和集合的容量进行 &运算,得到介于0和集合容量值之间一个数字.该数字表示着数组的下标. 也就是该元素应该存放在哪个元素中. Map与Collection -------------- Map与Collection在

通过反射创建自定义泛型的实例。

比如有这样一个泛型:Demo.GenericsSimple<T,TT> 我想要通过反射创建一个Demo.GenericsSimple<string,int>的实例可以通过下面的格式进行创建: System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("命名空间.User`形参数量N[[1形参类型全名,形参类型所在的程 序集名称],[2形参类型全名,形参类型所在的程序集名称],[3形参类型全名,形参类型

java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨

//Sets.java package org.rui.generics.set; import java.util.HashSet; import java.util.Set; /** * 一个Set有用工具 * @author lenovo * */ public class Sets { public static<T> Set<T> union(Set<T> a,Set<T> b) { Set<T> result=new HashSet&

(翻译)反射处理java泛型

当我们声明了一个泛型的接口或类,或需要一个子类继承至这个泛型类,而我们又希望利用反射获取这些泛型参数信息.这就是本文将要介绍的ReflectionUtil就是为了解决这类问题的辅助工具类,为java.lang.reflect标准库的工具类.它提供了便捷的访问泛型对象类型(java.reflect.Type)的反射方法. 本文假设你已经了解java反射知识,并能熟练的应用.如果还不了解java反射知识,那么你可以先移步到Oracel反射课程,这可能是你开始学习反射的好起点. ReflectionU