java中常用的反射
public class User {
private String name;
public String getName () {
return name;
}
public void setName (String name) {
this .name = name;
}
}
1、根据属性名称,利用反射射设置private属性的值
public static void setPrivateValue (User user, String privateName, String privateValue) {
try {
Field privateStringField = user.getClass().getDeclaredField(privateName);
privateStringField.setAccessible(true );
privateStringField.set (user, privateValue);
} catch (Exception e) {
e.printStackTrace();
}
}
User user = new User();
setPrivateValue(user, "name" , "hellworld" );
System.out .println(user.getName());
2、获取根据函数名调用函数,无参数
public static Object callingMethod (User user, String methodName) {
try {
Method method = user.getClass().getDeclaredMethod(methodName);
return method.invoke(user);
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
User user = new User();
setPrivateValue(user, "name" , "hellworld" );
System.out .println(callingMethod(user, "getName" ));
3、获取根据函数名调用函数,带参数
public static Object callingMethod(User user, String methodName, Class <?>[] cls , Object [] objs ) {
try {
Method method = user.getClass().getDeclaredMethod(methodName, cls);
return method.invoke(user, objs);
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
User user = new User();
callingMethod(user, "setName" , new Class[]{String .class}, new Object []{"hellowrld" });
System.out.println(callingMethod(user, "getName" ));