Closed tigerose closed 4 years ago
根据JDK class编译过程,static final 的 field 在编译成 class 后,所有使用该 field 的地方都会被替换成字面量,因此无法被替换,例如:
public static final String NAME = "hulk";
public String getName() {
return NAME;
}
经过编译后,使用 NAME 变量的地方会被替换成 "hulk" 字面量:
public static final String NAME = "hulk";
public String getName() {
return "hulk";
}
因此,是 java 本身的限制导致的。
根据JDK class编译过程,static final 的 field 在编译成 class 后,所有使用该 field 的地方都会被替换成字面量,因此无法被替换,例如:
public static final String NAME = "hulk"; public String getName() { return NAME; }
经过编译后,使用 NAME 变量的地方会被替换成 "hulk" 字面量:
public static final String NAME = "hulk"; public String getName() { return "hulk"; }
因此,是 java 本身的限制导致的。
是啊,我之前查原因时,看了 .class 文件,确实是如此。 只能把 static final String从变量替换成方法,然后再用droidAssist。。。但是我要改的是BuildConfig。。。所以,代码不是我的,就改不了。。。可惜了。
FieldRead,InitializerExecution,都是过了,都是 类的static String变量可以替换,但是static final String就不行。