如何在java中获取class的特殊方法?

How get special method of class in java?

我有一个class,在Java中有一些方法如下:

public class Class1
{
    private String a;
    private String b;


    public setA(String a_){
        this.a = a_;
    }

    public setb(String b_){
        this.b = b_;
    }

    public String getA(){
        return a;
    }

    @JsonIgnore
    public String getb(){
        return b;
    }
}

我想获取 Class1 中所有以字符串 get 开头但未使用 @JsonIgnore 注释声明的方法。

我该怎么做?

您可以使用 java 反射。 例如

import static org.reflections.ReflectionUtils.*;

     Set<Method> getters = getAllMethods(someClass,
          withModifier(Modifier.PUBLIC), withPrefix("get"), withParametersCount(0));

     //or
     Set<Method> listMethods = getAllMethods(List.class,
          withParametersAssignableTo(Collection.class), withReturnType(boolean.class));

     Set<Fields> fields = getAllFields(SomeClass.class, withAnnotation(annotation), withTypeAssignableTo(type));

您可以使用 Java 反射遍历所有 public 和私有方法:

Class1 obj = new Class1();

Class c = obj.getClass();
for (Method method : c.getDeclaredMethods()) {
    if (method.getAnnotation(JsonIgnore.class) == null &&
        method.getName().substring(0,3).equals("get")) {
        System.out.println(method.getName());
    }
}

通过反射我们可以做到这一点。

public static void main(String[] args) {
    Method[] methodArr = Class1.class.getMethods();

    for (Method method : methodArr) {
        if (method.getName().contains("get") && method.getAnnotation(JsonIgnore.class)==null) {
            System.out.println(method.getName());
        }
    }
}