在Java中有什么方法可以判断一个类是否是一个简单的“Java”类?

时间:2015-10-15 20:19:49

标签: java reflection

我正在使用反射来读取我创建的一些类对象,并使用递归来追踪整个对象树。

我遇到的问题是,当我有一个'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类还是我编写的复杂对象。这应该不难。

我相信我的选择是:

  1. 试验和错误将它们全部单独列出 - 希望两年 在将来我不会添加我没有使用的类型的另一个属性 之前(哎呀!)
  2. 查看班级名称是否以字符串 java开头。(double Yuck!)
  3. 请告诉我,我错过了一个很好的实用工具类/方法。

1 个答案:

答案 0 :(得分:1)

没有单一的API调用可以告诉您对象是否是内部的。

但是,您可以使用以下方法:

isPrimitive
isArray
getPackage

第一个是相当直接的。第二个,isArray是必需的,因为有一个特殊的方法将返回数组的组件类型。最后getPackage可以用来回答这个问题,这个对象是否是JDK系列的一部分。所有公共Java API包都以java.javax.开头,私有Java API以sun.开头。