0
我需要解析Java類的屬性類型並支持點表示法。有沒有可以做到這一點的圖書館?我正在尋找的方法的簽名將如下所示:用點符號解決類屬性類型
getPropertyType(Person.class, "job.phone.areaCode");
我需要解析Java類的屬性類型並支持點表示法。有沒有可以做到這一點的圖書館?我正在尋找的方法的簽名將如下所示:用點符號解決類屬性類型
getPropertyType(Person.class, "job.phone.areaCode");
您可以使用反射來完成此操作。下面的代碼基本上使用反射API中的方法'getDeclaredField'來檢索所需字段的類型。它通過點符號字段名稱的點進行導航。
public static Class<?> getPropertyType(Class<?> clazz, String fieldName) {
final String[] fieldNames = fieldName.split("\\.", -1);
//if using dot notation to navigate for classes
if (fieldNames.length > 1) {
final String firstProperty = fieldNames[0];
final String otherProperties =
StringUtils.join(fieldNames, '.', 1, fieldNames.length);
final Class<?> firstPropertyType = getPropertyType(clazz, firstProperty);
return getPropertyType(firstPropertyType, otherProperties);
}
try {
return clazz.getDeclaredField(fieldName).getType();
} catch (final NoSuchFieldException e) {
if (!clazz.equals(Object.class)) {
return getPropertyType(clazz.getSuperclass(), fieldName);
}
throw new IllegalStateException(e);
}
}
儘管此代碼可能會幫助解決問題, 提供附加的內容關於_why_和/或_how_它 回答了這個問題會顯著提高其 長期價值。請[編輯]你的答案,添加一些 的解釋。 –
更好的方法是使用類的getter方法,而不是直接訪問該字段。 – marcosalpereira