Java泛型擦除(泛型反射)

package com.sanmao10;

import java.lang.reflect.Method;
import java.util.ArrayList;

public class test_fanxing {
    /**
     * * ArrayList的一个对象,在这个集合中添加一个字符串数据,如何实现呢?
     * 泛型只在编译期有效,在运行期会被擦除掉*/
    public static void main(String[] args) throws Exception{
        ArrayList list=new ArrayList<>();
        list.add(123);
        list.add(321);
        //list.add( "www"); 将会报错  为了解决这个问题,我们对其add方法进行反射,讲字符串添加进去
        //因为不在编译期 所以泛型无效
        Class clazz=Class.forName("java.util.ArrayList");
        Method m=clazz.getMethod("add",Object.class); //API add(E e) 参数Object
        m.invoke(list,"sanmao");
        System.out.println(list);  //[123, 321, sanmao] 成功反射进来字符串

    }
}

你可能感兴趣的:(Java泛型擦除(泛型反射))