在 Java 中有什么方法可以判断 class 是否是简单的 'Java' class?

In Java is there any way to tell if a class is a simple 'Java' class?

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

我遇到的问题是,当我有一个 '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 也不是...

真的没有 class 或实用程序包可以处理此请求吗?我只想知道 Class 是内部/本机/普通/简单/基本 Java class 还是我编写的复杂对象。这应该不难。

我相信我的选择是:

  1. 尝试和错误将它们单独列出 - 希望两年 以后我不会添加我没有使用过的类型的另一个属性 之前(恶心!)
  2. 查看 class 名称是否以字符串 java. 开头(double Yuck!)

请告诉我我错过了一个不错的实用程序 class/method。

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

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

isPrimitive
isArray
getPackage

第一个相当简单。第二个,isArray 是必需的,因为有一个特殊的方法可以 return 数组的组件类型。最后 getPackage 可以用来回答这个问题,这个对象是不是 JDK 家族的一部分。所有 public Java API 包都以 java.javax. 开头,私有 Java API 以 sun. 开头.