是否可以使用Java8闭包轻松获取方法的名称?

是否可以使用Java8闭包轻松获取方法的名称?,java,Java,因此,如果我正在记录日志并希望引用一个类,那么使用以下内容可能不是一个坏主意: log.warn("I did not find an instance of class "+SomeClass.class.getName()); log.warn("You forgot to call "+(SomeClass::aMethod).getName()+" before calling this method"); 这样,重构将保证更新字符串以使用正确的名称 能够用方法做到这一点真是太好了。

因此,如果我正在记录日志并希望引用一个类,那么使用以下内容可能不是一个坏主意:

log.warn("I did not find an instance of class "+SomeClass.class.getName());
log.warn("You forgot to call "+(SomeClass::aMethod).getName()+" before calling this method");
这样,重构将保证更新字符串以使用正确的名称

能够用方法做到这一点真是太好了。您不能使用Java 7,但基于Java 8的东西可能会起作用,如下所示:

log.warn("I did not find an instance of class "+SomeClass.class.getName());
log.warn("You forgot to call "+(SomeClass::aMethod).getName()+" before calling this method");
--如果SomeClass::aMethod实际上是一个方法引用而不是Lambda,那么它将非常有用


是否有人知道实现这一点的方法,也许是从lambda中提取原始方法名?

或者“轻松”是有争议的。将生成当前堆栈跟踪,您可以使用该跟踪提取当前调用堆栈的类和方法名称-这不是一个便宜的调用您使用的是
Logging
API(如
Log4J
)还是内置的Logging API?因为它们提供了这个功能already@MadProgrammer我认为他们不一定需要当前的执行方法。我认为他们需要一种编译时、类型安全的方法来引用方法。