我正在开发一个项目,需要在已编译的java代码中计算getter和setter的数量。我是新手,不知道在哪里以及如何开始。 我已经安装了eclipse并添加了Bytecode插件来查看java代码的字节码。
关于我接下来需要做什么的任何想法?
答案 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;
}