
java反射取对象属性值 不是通过get方法取值?
/*****JSON格式orJXL格式*默认JSON*@paramorder*@throwsIllegalAccessException*@throwsIllegalAr...
/****
* JSON格式 or JXL格式
* 默认JSON
* @param order
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public ResultObj(Order order,String cmd) throws IllegalArgumentException, IllegalAccessException {
if (cmd==null || "".equals(cmd))
cmd = JSON ;
StringBuffer sb = new StringBuffer();
Class<? extends Order> orderClass = order.getClass();
Field[] fields = orderClass.getDeclaredFields();
Field field = null;
int len = fields.length;
sb.append("{\"cell\":[");
for (int i = 0; i < len; i++) {
field = fields[i];
field.setAccessible(true); // 设置些属性是可以访问的
Object val = field.get(order); // 得到此属性的值
String type = field.getType().toString(); // 得到此属性的类型
if (type.endsWith("String") && val != null) {
sb.append("\"");
sb.append(val);
sb.append("\"");
} else {
sb.append(val);
}
sb.append(",");
}
sb = Global.subLastCode(sb, ",");
sb.append("]}");
this.extDate = sb != null ? sb.toString() : "";
sb = null;
}
Object val = field.get(order); // 得到此属性的值
这里是通过设置的get方法进行取值还是直接可以访问一个private的对象属性? 展开
* JSON格式 or JXL格式
* 默认JSON
* @param order
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public ResultObj(Order order,String cmd) throws IllegalArgumentException, IllegalAccessException {
if (cmd==null || "".equals(cmd))
cmd = JSON ;
StringBuffer sb = new StringBuffer();
Class<? extends Order> orderClass = order.getClass();
Field[] fields = orderClass.getDeclaredFields();
Field field = null;
int len = fields.length;
sb.append("{\"cell\":[");
for (int i = 0; i < len; i++) {
field = fields[i];
field.setAccessible(true); // 设置些属性是可以访问的
Object val = field.get(order); // 得到此属性的值
String type = field.getType().toString(); // 得到此属性的类型
if (type.endsWith("String") && val != null) {
sb.append("\"");
sb.append(val);
sb.append("\"");
} else {
sb.append(val);
}
sb.append(",");
}
sb = Global.subLastCode(sb, ",");
sb.append("]}");
this.extDate = sb != null ? sb.toString() : "";
sb = null;
}
Object val = field.get(order); // 得到此属性的值
这里是通过设置的get方法进行取值还是直接可以访问一个private的对象属性? 展开
展开全部
反射不是通过get取值的,是通过该对象的信息,比如说名称、内存地址等来访问类,方法,属性等,可以获取任意对象的信息,但不能获得私有属性(private String s=“sd”;)的值,切记
推荐《JAVA核心技术》这本书会对你有帮助的
推荐《JAVA核心技术》这本书会对你有帮助的
追问
呃,我的bean里面都是私有属性,不过有get方法set方法,好像用了这个field.setAccessible(true);私有的也可以访问,所以我现在很好奇到底是通过Field对象去找其对应的get方法取值,还是直接到堆空间根据地址取值
追答
我个人认为是后者,现在正在重温《java核心技术》,有充分理由及证据时会再补上的,谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询