如何通过反射更改变量名称?

时间:2014-08-13 02:06:18

标签: reflection groovy

我有一个这样的变量:

   People model=Mock()//created by spock' mock

如何通过反射将变量名“model”更改为“model_0”?

1 个答案:

答案 0 :(得分:0)

我怀疑有任何方法可以用反思做到这一点。我和@tim_yates在一起。

我不是字节码/编译器专家,但我确实认为变量的名称在编译时会变成符号,所以它们根本不是可变的。以下Java类:

public class Var {
  void a() {
    int myVar = 1;
    myVar += 1;
  }
}

编译和反编译(使用jd-gui)后,代码变为:

public class Var
{
  void a()
  {
    int i = 1;
    i++;
  }
}

变量名称已更改。

在Groovy上,您可以使用AST,它将为您提供对生成的树的全部功能。以下课程:

class Asts {
  def wat() {
    Integer myVar = 90
  }
}

将生成以下AST:

现在您可以编写自己的AST transformation进行更改。但是,对我来说似乎不值得,集合或地图应该足够了。