Java 用点表示法解析类属性类型
我需要解析支持点表示法的Java类的属性类型。有图书馆可以这样做吗?我要查找的方法的签名将如下所示:Java 用点表示法解析类属性类型,java,apache-commons-beanutils,Java,Apache Commons Beanutils,我需要解析支持点表示法的Java类的属性类型。有图书馆可以这样做吗?我要查找的方法的签名将如下所示: getPropertyType(Person.class, "job.phone.areaCode"); 你可以用反射来做。下面的代码基本上使用反射api中的“getDeclaredField”方法来检索所需字段的类型。它通过点符号字段名的点来工作 public static Class<?> getPropertyType(Class<?> clazz, String
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);
}
}
尽管该代码可能有助于解决该问题,但提供关于为什么和/或如何回答该问题的额外上下文将显著提高其长期价值。请在回答中添加一些解释。更好的方法是使用类的getter方法,而不是直接访问字段。