写的一个简单的工具类,可以做对象类型的判断和迭代出一个对象所有属性的值
2012-08-02 20:58
603 查看
import java.lang.reflect.Field; /** * @author songzheng */ public class TypeUtil { /** * 得到某个对象类型对象 */ public static Class<?> getClass(Object obj) { if (obj instanceof Integer) { return Integer.TYPE; } else if (obj instanceof Boolean) { return Boolean.TYPE; } else if (obj instanceof Long) { return Long.TYPE; } else if (obj instanceof Short) { return Short.TYPE; } else if (obj instanceof Double) { return Double.TYPE; } else if (obj instanceof Float) { return Float.TYPE; } else if (obj instanceof Character) { return Character.TYPE; } else if (obj instanceof Byte) { return Byte.TYPE; } return obj.getClass(); } /** * 判断某个对象是否为装箱的基本类型对象或基本类型 */ public static boolean isBasicType(Object obj) { final String[] types = {"int", "char", "boolean","long", "double", "float", "byte", "short"}; String clazzName = getClass(obj).getName(); int j = 0; for (int i = 0; i < types.length; i++) { if (clazzName.equals(types[i])) { break; } j++; } if (j <= 7) { return true; } else { return false; } } /** * 判断某对象是否为字符串 */ public static boolean isString(Object obj) { return obj instanceof String; } /** * 迭代出一个对象的全部基本属性 */ public static void recurse(Field[] fs, Object obj, List<Object> list) throws IllegalArgumentException, IllegalAccessException { for (int i = 0; i < fs.length; i++) { int j = 0; Field f = fs[i]; f.setAccessible(true); Object v = f.get(obj); if (isBasicType(v)) { j++; list.add(v); } if (isString(v)) { j++; list.add(v); } if (j == fs.length) continue; if (!(isBasicType(v) || isString(v))) { recurse(v.getClass().getFields(), v, list); } } } public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException { List<Object> list = new ArrayList<Object>(); Name n = new Name("sz", "yy", new Address("aa", "bb")); Person p = new Person(11, n); recurse(p.getClass().getDeclaredFields() ,p, list); System.out.println(list); } } class Person { private int age; private Name name; public Person(int age, Name name) { this.age = age; this.name = name; } } class Name { public Name(String first, String second, Address address) { this.first = first; this.second = second; this.address = address; } public String first; public String second; public Address address; } class Address { public Address(String age, String name) { this.age = age; this.name = name; } public String age; private String name; }
相关文章推荐
- 写一个递归方法,传入一个Map,返回这个Map对象中一共有多个Map类型的对象 Map中是可以添加Map,被添加的这个Map也可以添加Map,所以需要判断传入的Map对象的所有子节点,如果是Map就
- 迭代器-迭代对象-dir(a)可以查看该数据类型有多少种方法。range(10)在py3里就是一个迭代器,for循环实际就是迭代器的应用
- console.dir()可以显示一个对象所有的属性和方法
- 如何遍历一个对象所有的属性并判断属性值
- 输出一个对象的所有属性的值,可以不用反射机制,用JSON处理更方便
- Python----一个对象的属性可以是另外一个类型创建的对象
- python 判断一个对象是可迭代对象collections模块的Iterable类型判断
- 简单工厂(Factory)-提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
- 检测对象中属性的存在与否可以通过3种方法来判断。
- Python 基础 —— 判断一个对象是否为可迭代对象
- 如何判断一个对象是否含有属性
- 通过一个简单类就可以知道java类和对象的初始化顺序
- java反射机制判断对象所有属性是否全部为空
- ngFor循环出来的数组,在判断上区别可以自定义一个属性给循环出来的当前数组,供使用
- 简单的面向对象思想,写一个传奇人物的属性
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
- JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
- 判断一个对象所属类的类型
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
- 提示错误(error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型)。