首页 > 解决方案 > 如何从 Java 8 中的方法参考中获取方法名称

问题描述

我有一个功能接口和一个使用该接口的类,我不想拥有类方法的名称而不是接口的名称。下面给出的代码:

@FunctionalInterface 
interface MyInterface{  
    void display();  
}  
public class Example {  
    public static void myMethod(){  
    System.out.println("Instance Method");  
    System.out.println(new Object(){}.getClass().getEnclosingMethod().getName());

    }  

    public static void myMethod1(){  
        System.out.println("Instance Method");  
        System.out.println(new Object(){}.getClass().getEnclosingMethod().getName());

        }  
    public static String myMethod2(){  
        return "exec";
        } 
    public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException {  
    // Method reference using the object of the class
    MyInterface ref = Example::myMethod2;  
    // Calling the method of functional interface 

    }
}

所以需要的输出应该是类的方法名,即

myMethod2

前提是这个方法不应该执行并且什么都不应该改变

标签: javamethod-referencefunctional-interface

解决方案


他们编写实现的方式,他们故意不让这个容易找到。这是因为他们希望灵活地改变未来的实施方式。

话虽如此,你能做的是

  • 添加一个Instrumentation以记住这些 lambda 的创建时间并保存它们的字节码。这些 lambdas 没有类名,但它们有可以读取的字节码。
  • 您可以阅读字节码以查看它们调用的方法。

显然,这不适用于非平凡的 lambda。


推荐阅读