找到 class 的吸气剂的最佳方法是什么

What's the best way to find the getters of a class

我有一个for (Field field : CLASS.getDeclaredFields())

我想找到 如果 CLASS 中的每个字段 都有一个 getter 方法 returns它的价值

所以我在那个循环中使用:

List<Field> FieldGettersNotFound = new ArrayList<>();

for (PropertyDescriptor descriptor : Introspector.getBeanInfo(CLASS).getPropertyDescriptors()){

                //Check for getters

                if (descriptor.getReadMethod() != null){

                    if (!( descriptor.getReadMethod().getParameters().length == 0 &&
                            descriptor.getReadMethod().getReturnType().equals(field.getType()))){

                        if (!FieldGettersNotFound.contains(field)) FieldGettersNotFound.add(field);

                    }

                    else {

                        FieldGettersNotFound.remove(field);
                        break;

                    }

                }

            }

if (FieldGettersNotFound.size()>0) throw an Exception;

看起来还好,但是遇到这种情况,并没有抛出异常

因为程序正在双重检查 getName();

public class RandomSituation {

private String Name;
private String LastName;

public String getName(){

    return Name;

}

}

解决此问题的一种方法是:

(我只是在 else 中添加了 1 if

for (PropertyDescriptor descriptor : Introspector.getBeanInfo(CLASS).getPropertyDescriptors()){

                //Check for getters

                if (descriptor.getReadMethod() != null){

                    if (!( descriptor.getReadMethod().getParameters().length == 0 &&
                            descriptor.getReadMethod().getReturnType().equals(field.getType()))){

                        if (!FieldGettersNotFound.contains(field)) FieldGettersNotFound.add(field);

                    }

                    else {

                        if (descriptor.getReadMethod().getName().equals("get"+field.getName()){

                        FieldGettersNotFound.remove(field);
                        break;

                      }

                    }

                }

            }

但一些精神病患者可能会调用他们的方法 returnName() 或类似这样的东西

如果 class 的所有字段都有 getter 方法,是否有更好的方法来检查

好吧,解决方案非常简单...

我刚刚创建了一个 List<Method> Getters = new ArrayList<>(); 来跟踪我检查过的每个方法

for (PropertyDescriptor descriptor : Introspector.getBeanInfo(CLASS).getPropertyDescriptors()){

                //Check for getters

                if (descriptor.getReadMethod() != null && !Getters.contains(descriptor.getReadMethod())){

                    if (!( descriptor.getReadMethod().getParameters().length == 0 &&
                            descriptor.getReadMethod().getReturnType().equals(field.getType()))){

                        if (!FieldGettersNotFound.contains(field)) FieldGettersNotFound.add(field);

                    }

                    else {

                        FieldGettersNotFound.remove(field);
                        Getters.add(descriptor.getReadMethod());
                        break;

                    }

                }

            }