我需要解析支持点表示法的Java类的属性类型。有没有可以做到这一点的图书馆?我正在寻找的方法的签名看起来像这样:
getPropertyType(Person.class, "job.phone.areaCode");
答案 0 :(得分:0)
你可以使用反射来做到这一点。基本上,下面的代码使用方法' getDeclaredField'从反射api中检索所需字段的类型。它可以通过点符号字段名称的点来导航。
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);
}
}