说我在A班有private final static int N = 1
有没有机会'破解'以便N变为2(没有触及源文件A.java)?
set
切入点似乎不适用于这些final
字段。
问题是,我有一些项目的源代码,我正在对它进行一些修改,以便在我们的地区部署它。我试图在不触及源文件的情况下进行这些更改,除非我必须这样做。
@VinceEmigh反射在我的情况下不起作用。源代码如下:
class MyClass
private final static String[] NAMES = {"Name1", "Name2", "Name3"};
public void createIsland() {
//something
int i = getNumberOfIsland();
String name = NAMES[i];
createIslandWithName(name);
//something
}
end
问题是我需要将那些硬编码的NAMES
更改为其他内容
答案 0 :(得分:3)
示例驱动程序类:
package de.scrum_master.app;
public class Application {
private final static String[] NAMES = { "Name1", "Name2", "Name3" };
public static void main(String[] args) {
for (String name : NAMES)
System.out.println(name);
}
}
<强>方面:强>
package de.scrum_master.aspect;
import de.scrum_master.app.Application;
public aspect ConstantChanger {
Object around() : get(* Application.NAMES) {
System.out.println(thisJoinPointStaticPart);
return new String[] { "Hack1", "Hack2", "Hack3", "Hack4", "Hack5" };
}
}
<强>输出:强>
get(String[] de.scrum_master.app.Application.NAMES)
Hack1
Hack2
Hack3
Hack4
Hack5
这样您就可以更改数组大小及其内容。这就是你需要的吗?