计算吸气剂和塞特犬

时间:2014-01-24 04:12:15

标签: java

我正在开发一个项目,需要在已编译的java代码中计算getter和setter的数量。我是新手,不知道在哪里以及如何开始。  我已经安装了eclipse并添加了Bytecode插件来查看java代码的字节码。

关于我接下来需要做什么的任何想法?

3 个答案:

答案 0 :(得分: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开头。

答案 1 :(得分: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;
}

答案 2 :(得分:3)

参考Apache字节码操作库BCEL。 字节代码工程库旨在为用户提供分析,创建和操作(二进制)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;
}