首页 > 解决方案 > 获取相关的 getter/setter 字段(成员变量)

问题描述

我有一个Field fMyClass,我想检索相关的 getter/setter,如果它存在的话。我该怎么做呢?

注意:我不想依赖命名约定,所以请不要给出摆弄字段名称的答案。毕竟myField,没有名称getMyField或仍然是 getter的字段的 getter。isMyField

标签: javareflectionfieldgetter-settermember-variables

解决方案


这是我的想法,虽然不完全正确。检查方法名称中是否包含字段名称,以及返回类型和参数参数类型。我觉得如果没有关于字段的 setter/getter 方法的规则。这几乎是不可能的。

    @Test
    void test_fieldGetterSetter() throws NoSuchFieldException {
    Field f = MyClass.class.getDeclaredField("name");
    Class<?> declaringClass = f.getDeclaringClass();

    Method[] declaredMethods = declaringClass.getDeclaredMethods();

    for (Method declaredMethod : declaredMethods) {
        String name = declaredMethod.getName();

        // Can also check return type, argument type to increase the correctness
        if (isFieldNameWithMethodName(f.getName(), name)) {
            String format = String.format("Field name is %s and possible method name is %s", f.getName(), name);
            System.out.println(format);
        }
    }
}

private boolean isFieldNameWithMethodName(String fieldName, String methodName) {
    if (methodName.toLowerCase().contains(fieldName.toLowerCase())) {
        return true;
    }

    return false;
}

推荐阅读