ArrayList<Integer>的一个对象,在这个集合中添加一个字符串数据
test2.java
import java.lang.reflect.Method;
import java.util.ArrayList;
public class test2 {
/**
* @param args
* * A:案例演示
* ArrayList<Integer>的一个对象,在这个集合中添加一个字符串数据,如何实现呢?
* 泛型是在编译时期检查的,但是在运行期会被擦除掉
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ArrayList<Integer> list = new ArrayList<>();
list.add(111);
list.add(222);
list.add(333);
list.add(444);
Class<?> clazz = Class.forName("java.util.ArrayList");
Method m = clazz.getMethod("add", Object.class);
Object obj = m.invoke(list, "abc");
System.out.println(obj); //打印的是add方法的返回值
System.out.println(list);
}
}
输出:
true
[111, 222, 333, 444, abc]
此方法可将obj对象中名为propertyName的属性的值设置为value。
test3.java
package cn.ldw.test;
import java.lang.reflect.Field;
public class Test3 {
//此方法可将obj对象中名为propertyName的属性的值设置为value。
public void setProperty(Object obj, String propertyName, Object value) throws Exception{
Class<?> clazz = obj.getClass(); //获取到该对象的字节码对象
Field f = clazz.getDeclaredField(propertyName); //暴力获取该字段的名字
f.setAccessible(true); //去除权限
f.set(obj, value); //修改属性值
}
}
test4.java
public class test4 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Student s = new Student();
test3 t = new test3();
System.out.println(s);
t.setProperty(s, "name","李四" );
t.setProperty(s, "age", 24);
System.out.println(s);
}
}
class Student {
private String name;
public int age;
public String toString() {
return name + " ," + age;
}
}
输出:
null ,0
李四 ,24