Java反射机制==>运行时使用反射分析对象
来源:互联网 发布:腾讯对战平台mac版 编辑:程序博客网 时间:2024/06/15 01:57
1、利用反射机制可以查看在编译时不清楚的对象域
package 反射机制;import java.util.ArrayList;public class ObjectAnalyzerTest { public static void main(String[] args) { ArrayList<Integer> s=new ArrayList<>(); for(int i=1;i<6;i++){ s.add(i*i); } System.out.println(new ObjectAnalyzer().toString(s)); }}
package 反射机制;import java.lang.reflect.AccessibleObject;import java.lang.reflect.Array;import java.lang.reflect.Field;import java.lang.reflect.Modifier;import java.util.ArrayList;/** * 在运行时使用反射分析对象 * * @author asus1 * */public class ObjectAnalyzer { private ArrayList<Object> visited = new ArrayList<>(); public String toString(Object obj) { if (obj == null) return null; if (visited.contains(obj)) return "...."; visited.add(obj); Class cl = obj.getClass(); if (cl == String.class) return (String) obj; // 对于数组对象,返回该对象的值 if (cl.isArray()) { // cl.getComponentType()返回数组的class对象 String r = cl.getComponentType() + "[]{"; for (int i = 0; i < Array.getLength(obj); i++) { if (i > 0) r += ","; Object val = Array.get(obj, i); // isPrimitive()判断指定的class对象是否是一个基本类型 if (cl.getComponentType().isPrimitive()) r += val; else r+=toString(val); } return r + "}"; } // 检查类及其父类的域 String r = cl.getName(); do { r += "["; Field[] fields = cl.getDeclaredFields(); // 为Field设置可访问标志,falg=true表示屏蔽Java语言的访问检查,使得对象的私有属性可以被查询和设置 AccessibleObject.setAccessible(fields, true); // 获取field的值 for (Field f : fields) { if (!Modifier.isStatic(f.getModifiers())) { if (!r.endsWith("[")) r += ","; r += f.getName() + "="; try { Class t = f.getType(); // f.get(obj),根据obj,获取域f的值 Object val = f.get(obj); if (t.isPrimitive()) r += val; else r += toString(val); } catch (Exception e) { e.printStackTrace(); } } } r += "]"; cl = cl.getSuperclass(); } while (cl != null); return r; }}
输出结果: java.util.ArrayList[elementData=class
java.lang.Object[]{java.lang.Integer[value=1][][],java.lang.Integer[value=4][][],
java.lang.Integer[value=16][][],
java.lang.Integer[value=25][][],
null,null,null,null,null},size=5][modCount=5][][]
阅读全文
0 0
- JAVA 反射机制 在运行时使用反射分析对象
- Java反射机制==>运行时使用反射分析对象
- 在运行时使用反射分析对象
- Java中的反射(3)——在运行时使用反射分析实例化的对象
- 利用java反射机制分析对象
- java反射机制reflect 分析Object对象
- Java 反射机制分析
- Java反射机制分析
- 使用Java反射机制创建对象
- Java反射(三)在运行时利用反射分析对象
- java反射分析对象
- 使用java反射机制
- java 反射机制使用
- java 反射机制 / 反射new 对象 / 反射方式调用方法
- Java反射机制创建对象
- java反射机制创建对象
- java反射机制生成对象
- Java反射机制创建对象
- hdu 2084 数塔
- 无向图的割点、桥与双连通分量
- Android开发之DrawerLayout与ToolBar之间不得不说的秘密
- python编码问题
- 极光推送
- Java反射机制==>运行时使用反射分析对象
- JavaScript单线程异步的背后——事件循环机制
- Implement regular expression matching with support for '.' and '*'.
- activity的启动模式有哪些?是什么含义?(一)
- 【暴力模拟】二阶魔方旋转
- 利用RadioGroup嵌套RadioButton实现Android主页面底部导航栏动态设置图片大小
- C++:模板
- 机器学习深度学习基础笔记(1)——基础理论
- hdu 1002 A + B Problem II 大整数相加