java - 如何从 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
前提是这个方法不应该执行并且什么都不应该改变
解决方案
他们编写实现的方式,他们故意不让这个容易找到。这是因为他们希望灵活地改变未来的实施方式。
话虽如此,你能做的是
- 添加一个
Instrumentation
以记住这些 lambda 的创建时间并保存它们的字节码。这些 lambdas 没有类名,但它们有可以读取的字节码。 - 您可以阅读字节码以查看它们调用的方法。
显然,这不适用于非平凡的 lambda。
推荐阅读
- python-3.x - python:我不能为矩形赋予不同的颜色(在列表中)
- python - 我什么时候需要开始将我的函数分组到类中?
- jakarta-ee - ClassNotFoundException CXFServlet 迁移 JBoss 7 到 Wildfly 13
- python - Pyspark,尝试使用变量创建列来填充列中的每一行
- sql-server - 创建聚集索引和非聚集索引
- google-smart-home - Google 助理页面上的联系方式未更新
- java - 如果用户切换到另一个 HDMI,如何停止播放视频?
- haskell - 在 Haskell 中使用绑定和 lambda 重写 do-block
- laravel - 如何使用 Laravel 5.8 将散列密码存储到数据库
- c# - 如何通过 SqlDataReader 从 LEFT JOIN 打印值?