假设我在 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
更改为其他内容
最佳答案
示例驱动程序类:
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
通过这种方式,您可以更改数组大小及其内容。这是你需要的吗?
关于java - AspectJ - 有没有办法将 'hack' 设为静态最终字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24880054/