版权声明:本文为博主原创文章,未经博主允许也可以任意转载。 https://blog.csdn.net/fudaxing/article/details/78259418
Just one important setting: fields[i].setAccessible(true);
关注微信公众号:
回复语言名称,比如java,python,go,C, C++.有海量资源免费赠送!
package com.kado;
import java.lang.reflect.Field;
public class ReflectionUtils {
public static Object getInstance(Class clazz, String ... args) {
try {
Object object = Class.forName(clazz.getName()).newInstance();
Field[] fields = clazz.getDeclaredFields();
for(int i=0; i<fields.length; i++) {
fields[i].setAccessible(true);
for(int j=0; j<args.length; j++) {
String nameAndValue = args[j];
String nameAndValuePair[] = nameAndValue.split(":");
if(fields[i].getName().equals(nameAndValuePair[0])) {
fields[i].set(object, nameAndValuePair[1]);
break;
}
}
}
return object;
} catch(ClassNotFoundException|InstantiationException|IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
public static void main(String args[]) {
Object object = getInstance(User.class, "username:kado","password:123456");
User user = (User) object;
System.out.println(user.getUsername());
System.out.println(user.getPassword());
}
}
related User bean code:
package com.kado;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User(){}
}
more, if the bean do not have getter and setter method for its private attributes. you can use:
- fields[i].set(object, nameAndValuePair[1]); to set value.
- Object before=fields[i].get(user); to get value.
example code:
package com.kado;
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws IllegalAccessException {
User user = new User("kado", "123456");
Field[] fields = user.getClass().getDeclaredFields();
for(int i=0; i<fields.length; i++)
{
fields[i].setAccessible(true);
Object before=fields[i].get(user);
System.out.println("before modify:"+before);
if(fields[i].getName().equals("username")) {
fields[i].set(user, "Kevin");
} else if(fields[i].getName().equals("password")) {
fields[i].set(user, "654321");
}
Object after=fields[i].get(user);
System.out.println("after modify:"+after);
}
}
}
I have reference yaerfeng java高级编程-使用反射强制给private字段赋值 , Thank you!