我正在研究一個需要計算編譯的java代碼中吸氣器和吸氣器數量的項目。我是新手,不知道在哪裏以及如何開始。 我已經安裝了eclipse並添加了Bytecode插件來查看java代碼的字節碼。計數吸氣器和吸氣器
關於接下來我需要做什麼的想法?
我正在研究一個需要計算編譯的java代碼中吸氣器和吸氣器數量的項目。我是新手,不知道在哪裏以及如何開始。 我已經安裝了eclipse並添加了Bytecode插件來查看java代碼的字節碼。計數吸氣器和吸氣器
關於接下來我需要做什麼的想法?
請參閱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;
}
您可以使用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;
}
遵循制定者同樣的方法,有一點你需要考慮的是,他們通常與is
代替get
開始布爾干將。
+1示例 – SpringLearner
+1簡單解決方案 –
您可以使用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;
}
如何使用ASM來計算getfield/putfield指令,這可能嗎? – user2214408
你在問什麼? [茉莉](http://en.wikipedia.org/wiki/Jasmin_%28Java_assembler%29)? –
如何'Java'和'Assembly'標籤這裏有關係嗎? –
你會想要使用反射。你有什麼嘗試? – Romski
+1用於反射。 –