JAva反射getterとsetter
2238 ワード
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class GetterSetter {
/**
* java bean get
*
* @param claz
* @param fieldName
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public Method getGetter(Class claz, String fieldName) {
StringBuilder sb = new StringBuilder();
sb.append("get").append(fieldName.substring(0, 1).toUpperCase())
.append(fieldName.substring(1));
try {
Class[] types = new Class[] {};
return claz.getMethod(sb.toString(), types);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* java bean set
*
* @param claz
* @param fieldName
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Method getSetter(Class claz, String fieldName) {
try {
Class[] parameterTypes = new Class[1];
Field field = claz.getDeclaredField(fieldName);
parameterTypes[0] = field.getType();//
StringBuilder sb = new StringBuilder();
sb.append("set").append(fieldName.substring(0, 1).toUpperCase())
.append(fieldName.substring(1));
Method method = claz.getMethod(sb.toString(), parameterTypes);
return method;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* set
*
* @param t
* @param fieldName
* @param value
*/
public void invokeSetter(T t, String fieldName, Object value) {
Method method = getSetter(t.getClass(), fieldName);
try {
method.invoke(t, new Object[] { value });
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* get
*
* @param t
* @param fieldName
*/
public Object invokeGetter(T t, String fieldName) {
Method method = getGetter(t.getClass(), fieldName);
try {
return method.invoke(t, new Object[0]);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
GetterSetter gs = new GetterSetter();
User user = new User();
for (int i = 0; i < 33; i++) {
gs.invokeSetter(user, "id", 1);
System.out.println(gs.invokeGetter(user, "id"));
}
}
}