我正在处理一个项目,需要统计已编译的Java代码中getter和setter方法的数量。我对此不太熟悉,不知道从哪里开始。
我已经安装了Eclipse,并添加了Bytecode插件以查看Java代码的字节码。
你有什么想法,接下来该怎么做呢?
我正在处理一个项目,需要统计已编译的Java代码中getter和setter方法的数量。我对此不太熟悉,不知道从哪里开始。
我已经安装了Eclipse,并添加了Bytecode插件以查看Java代码的字节码。
你有什么想法,接下来该怎么做呢?
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
开头。
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;
}
请参考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;
}
Java
е’ҢAssembly
ж Үзӯҫзҡ„е…іиҒ”жҖ§гҖӮ - Ruchira Gayan Ranaweera