使用点表示法解析类属性类型

时间:2014-04-08 22:08:31

标签: java apache-commons-beanutils

我需要解析支持点表示法的Java类的属性类型。有没有可以做到这一点的图书馆?我正在寻找的方法的签名看起来像这样:

getPropertyType(Person.class, "job.phone.areaCode");

1 个答案:

答案 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);
    }
}