我正在使用反射来读取我创建的一些类对象,并使用递归来追踪整个对象树。
我遇到的问题是,当我有一个'Field'时,我需要知道它是一个简单的属性还是另一个复杂的对象。前者可以立即处理,但后者我需要深入研究并再次调用递归方法。我的代码是这样的:
recurse(Object o) {
Class clazz = o.getClass();
for (Field f : clazz.getDeclaredFields() ) {
fieldClass = f.getType();
// Heres the broken part
if ( !ClassUtils.isPrimitiveOrWrapper(fieldClass) ) {
recurse(f.get(o));
}
else {
// Process simple attribute
}
}
}
我认为这会有效,但后来我发现String不是'PrimitiveOrWrapper'....然后我发现Date也不是......然后我发现BigDecimal不是...... < / p>
是否真的没有可以处理此请求的类或实用程序包?我想要的只是知道一个Class是内部/本机/普通/简单/基本Java类还是我编写的复杂对象。这应该不难。
我相信我的选择是:
请告诉我,我错过了一个很好的实用工具类/方法。
答案 0 :(得分:1)
没有单一的API调用可以告诉您对象是否是内部的。
但是,您可以使用以下方法:
isPrimitive
isArray
getPackage
第一个是相当直接的。第二个,isArray
是必需的,因为有一个特殊的方法将返回数组的组件类型。最后getPackage
可以用来回答这个问题,这个对象是否是JDK系列的一部分。所有公共Java API包都以java.
或javax.
开头,私有Java API以sun.
开头。