调用 class “if”

Calling a class “if”

我正在尝试反编译/重新编译混淆的 Java 程序。从反编译的源代码来看,混淆器似乎成功调用了 class if:

public class hX extends il implements ciS {
   ...
   private bQk Llm = bQk.DwB();
   private final CAR lTV = new if(this);
   private final TYo RtQ = new ig(this);
   private final TYo G2Z = new ih(this);
   ...
}

尝试重新编译此 class 现在当然会导致错误:

[javac] Compiling 1 source file to /home/qdii/cld/dev/bar/build/classes
[javac] /home/qdii/cld/dev/bar/src/hX.java:53: error: <identifier> expected
[javac]     private final CAR lTV = new if(this);

有没有办法告诉 java 编译器接受 if 作为 class 名称?否则,我有什么选择?重命名 class 并找到所有对它的引用?

Java 源代码可能有这个约束,但字节码和类加载器不关心。

是编译器强制执行的。如果您使用 javacmanipulate or generate some bytecode 的替代编译器,那么您有可能完成通常不可能完成的事情。

这就是混淆器可能会做的事情。

混淆器可能正在利用这种可能性使反混淆变得更加困难或完全失败。基本上,您遇到的问题很可能是设计使然。

Is there a way to tell the java compiler to accept if as a class name?

没有。

Otherwise, what are my options? renaming the class and finding all the references to it?

是的。