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

我需要解析支持点表示法的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);
    }
}

尽管该代码可能有助于解决该问题,但提供关于为什么和/或如何回答该问题的额外上下文将显著提高其长期价值。请在回答中添加一些解释。更好的方法是使用类的getter方法,而不是直接访问字段。