计算Getter和Setter方法数量

5

我正在处理一个项目,需要统计已编译的Java代码中getter和setter方法的数量。我对此不太熟悉,不知道从哪里开始。

我已经安装了Eclipse,并添加了Bytecode插件以查看Java代码的字节码。

你有什么想法,接下来该怎么做呢?


3
иҝҷйҮҢжҳҜиҜўй—®Javaе’ҢAssemblyж Үзӯҫзҡ„е…іиҒ”жҖ§гҖӮ - Ruchira Gayan Ranaweera
5
你需要使用反射。你已经尝试过什么了吗? - Romski
+1 对于反射的使用。 - Scary Wombat
你必须决定getter是什么。你的类是否遵循Java Bean约定? - Sotirios Delimanolis
3个回答

8
你可以使用java.lang.reflect.*包来获取所有类的信息,例如变量、方法、构造函数和内部类。
示例:
public int noOfGettersOf(Class clazz) {
    int noOfGetters = 0;
    Method[] methods = clazz.getDeclaredMethods()
    for(Method method : methods) {
        String methodName = method.getName();
        if(methodName.startsWith("get") || methodName.startsWith("is")) {
            noOfGetters++;
        }
    }
    return noOfGetters;
}

对于setter方法,采用同样的方式。需要考虑的一件事是布尔类型的getter通常以is而不是get开头。


4
你可以使用Class.getDeclaredMethods(),类似这样的方式
public static int countGets(Class<?> cls) {
  int c = 0;
  for (java.lang.reflect.Method m : cls.getMethods()) {
    if (m.getName().startsWith("get")) {
      c++;
    }
  }
  return c;
}

public static int countSets(Class<?> cls) {
  int c = 0;
  for (java.lang.reflect.Method m : cls.getMethods()) {
    if (m.getName().startsWith("set")) {
      c++;
    }
  }
  return c;
}

使用汇编语言来计算getfield/putfield指令,这种方法可行吗? - user2214408
你在问什么?是关于Jasmin的问题吗? - Elliott Frisch

3

请参考Apache字节码操作库BCEL。Byte Code Engineering Library旨在为用户提供一种方便的方式来分析、创建和操作(二进制)Java类文件(以.class结尾的文件)。

然后,您可以使用反射来获取计数,如下所示:

public static int getGetterMethodCount(Class<?> cls) {
    int n = 0;
    for (Method m : cls.getMethods()) {
        // To identify the boolean setter "is" is used
        if (m.getName().startsWith("get") || m.getName().startsWith("is")) {
            n++;
        }
    }
    return n;
}

public static int getSetterMethodCount(Class<?> cls) {
    int n = 0;
    for (Method m : cls.getMethods()) {
        if (m.getName().startsWith("set")) {
            n++;
        }
    }
    return n;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接