我正在使用反射來讀取我創建的一些類對象,並使用遞歸來追蹤整個對象樹。在Java中有什麼方法可以判斷一個類是否是一個簡單的'Java'類?
我遇到的問題是,當我有一個'字段'時,我需要知道它是一個簡單的屬性還是另一個複雜的對象。前者可以立即處理,但後者需要深入研究並再次調用遞歸方法。我的代碼是這樣的:
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
}
}
}
我想這會工作,但後來我發現字符串不是「PrimitiveOrWrapper」 ......後來我發現,日期是也不...然後我發現BigDecimal不是...
是否真的沒有類或實用程序包可以處理此請求?我只想知道一個Class是一個內部/本地/簡單/簡單/基本的Java類還是我寫的一個複雜對象。這應該不難。
我相信我的選擇是:
- 試驗和錯誤全部列出來單獨 - 希望在未來2年 我不加我以前沒有使用過 一個類型的另一個屬性(Yuck!)
- 查看類名是否以字符串java開頭。(雙Yuck!)
請告訴我我錯過了一個很好的工具類/方法的地方。
沒有「簡單」Java類的這種概念。在任何意義上,'String','Date'和'BigDecimal'都不是「簡單的」。 – dimo414
只是一個簡短的問題。如果你處理「簡單」屬性,你需要知道它是什麼類?或者你正在寫一些序列化的東西?然後你可以使用標記界面。否則,如果添加新的類或類似的東西,你可能會遇到每個新的Java版本的問題。 –
所以,你想知道一個類是否是你寫的東西,而不是像java.lang.String或java.util.Date這樣的核心庫的東西呢?他們也認爲「簡單」(例如'org.apache.log4j.Logger')或者他們是「複雜的對象」? 您可以選擇讓您的對象使用註釋標記: '''@Complex public MyClass {int x; }''' – OscarRyz