java - 获取方法对象而不按名称寻址方法

标签 java reflection obfuscation

有没有办法不用方法名就可以获取方法对象?

例如我有一个类:

class Car {

    public String drive();
    public String giveUp();
    public String fillUp();
}

我想创建一个 Map<String, Method>方法(又名:(“移动”,驱动器()),(“名称”,giveUp()),....)。

由于使用了混淆,我无法通过名称获取方法对象。有没有办法在不必绑定(bind)这个的情况下获取方法名称?

我猜另一种问法是:

对于一个有 getClass() 的类,是否有等效的方法?我正在寻找与 giveUp.Method 类似的东西。

最佳答案

Java 中没有Car.giveUp.method() 这样的结构,因为方法不像类和对象那样是“一等公民”。

如果不知道混淆器对您的代码做了什么,或者添加了额外的信息,您就无法区分这些方法,因为除了它们的名称之外,它们具有相同的签名。

  • 一些混淆器会生成将原始名称映射到混淆后名称的文本文件,您可以使用该映射文件在运行时识别混淆方法。

  • 你可以给这个方法添加一个注解,比如

    @MappedMethod("move")
    public String drive();
    

    带有一个自写的注解@MappedMethod和一个类型为String的默认属性。然后使用反射获取所有方法及其注解,并使用注解值作为key。

关于java - 获取方法对象而不按名称寻址方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304040/

相关文章:

android - 如何从 proguard 中排除 .so 文件?

kotlin - 在用 Kotlin 编写的 Android 库的公共(public) API 中处理 R8 + JvmStatic Annotation + Lambda

java - 无法编译Java程序(注意: No Access to environment variable setup)

Java LinkedList排序改变了其他列表

java - 使用反射测试内部私有(private)类的方法

php - 如何在 PHP 中使用反射通过引用获取属性值?

java - 混淆和 jOOQ

java - 当必须接受许多连接时,客户端/服务器类型应用程序中的Java套接字出现问题

java - 参数值 [1] 与预期类型不匹配 [java.lang.Integer (n/a)]

javascript - 如何获取存储在变量中的函数的参数名称?