AspectJ - 有没有办法'破解'静态最终字段?

时间:2014-07-22 06:06:50

标签: java aspectj

说我在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更改为其他内容

1 个答案:

答案 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

这样您就可以更改数组大小及其内容。这就是你需要的吗?