JAVA-反射-暴力反射和泛型擦除
2021-02-04 04:16
标签:eth system 集合 执行 rar etc name tor 现在 在类中的某些成员变量或成员方法是私有的,这显然不希望我们显式使用,但是Java还是为我们提供了一个方法用来"暴力"的使用这些私有属性或方法。 注释和泛型是不进class文件的,说明泛型的底层是Object,而在编译期的泛型是用来约束代码的,因此我们可以直接反射调用add()方法添加不同类型的文件进同一个已经规定好泛型的集合。 JAVA-反射-暴力反射和泛型擦除 标签:eth system 集合 执行 rar etc name tor 现在 原文地址:https://www.cnblogs.com/torain/p/12797857.htmlJAVA-反射-暴力反射和泛型擦除
暴力反射
定义
Java中提供getDeclaredField()、getDeclaredMethod()、getDeclaredConstructor()等方法来获取包括私有的方法和属性,但是我们无法使用,使用setAccessible(true)方法可以使私有化暂时失效从而达到暴力反射的目的。代码
public class Demo04 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// 获取私有构造方法
Class c = Class.forName("com.oracle.demo01.Person");
Constructor con = c.getDeclaredConstructor(String.class, int.class);
// 暴力反射
con.setAccessible(true);
// 调用构造方法
Person p = (Person)con.newInstance("小狗", 1);
p.eat();
System.out.println(p.toString());
}
}
泛型擦除
定义
代码
public class Fanxing {
public static void main(String[] args) throws NoSuchFieldException, SecurityException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// 新建一个int集合,添加元素
ArrayList