如何才能获得方法的名称,就像我可以获得类的名称一样? (RandomClass.class.getName())
硬编码不起作用,因为混淆器会破坏它。
原因: 我正在注入这样的方法:
MethodNode getLocalPlayer = GetterAdapter.insert(false, true, "getLocalPlayer", "Lvanquish/accessors/Player;", "client", "yD", "LQZ;");
classNode.methods.add(getLocalPlayer);
//class client implements my interface which contains the method getLocalPlayer
public interface Client {
public int[] getPlayerIndices();
public Player getLocalPlayer();
public Player[] getPlayers();
public int getBaseX();
public int getBaseY();
public int getCameraX();
public int getCameraY();
}
//when I obfuscate my files getLocalPlayer get's a name like a2
//when you look above you see that the method name was hard code and so
// will it create an error
声明的方法在这里不起作用,因为我不知道方法名称,并且有4个相同类型的变量。
这会起作用还是乱七八糟?
@DataMap.varDetails(name = "getPlayerIndices")
public int[] getPlayerIndices();
答案 0 :(得分:0)
你需要你想要引用的每个方法反射性地做这样的事情:
static String baseXName;
public int getBaseX() {
if (baseXName == null)
baseXName = detectMyName();
... the actual code of the method ...
}
正如@eran在您的问题的第一条评论中建议的那样,和detectMyName()
将实例化Exception
并从其堆栈跟踪中检索调用方法的实际运行时名称。如果调用Thread.currentThread().getStackTrace()
,则可以通过获取堆栈跟踪而不实例化异常来避免一点点开销。
答案 1 :(得分:0)
你可以试试这个:
Thread.currentThread().getStackTrace();
它会显示当前线程中您的调用方法的堆栈 祝你好运:)