【发布时间】:2019-10-15 23:44:40
【问题描述】:
我正在使用反射,我注意到了意想不到的方法。我将其完全缩小到重现问题的这几行代码:
import java.lang.reflect.Method;
import java.util.Arrays;
class Scratch {
void someMethod() {
// Yea yea, useless code but it's just for demonstration!
Arrays.stream(new Integer[] { 0 }).toArray(Integer[]::new);
}
public static void main(String[] args) {
for (Method method: Scratch.class.getDeclaredMethods()) {
System.out.println(method);
}
}
}
我要求 JVM 给我所有的 declared methods。我希望看到 2 种方法:main 和 someMethod()。但我看到另一个:
private static java.lang.Integer[] Scratch.lambda$someMethod$0(int)
如果我删除 someMethod 中唯一的一行,我会因为调用 getDeclaredMethods 而得到 2 个方法,正如我所期望的那样。
这个lamba方法是什么?我不能直接在Scratch 上调用它,静态方法不可用(Integer[] result = Scratch.lambda$someMethod$0(0);)。它是某种私有方法吗? getDeclaredMethods() 上的文档没有说明这种行为。
我正在使用 Java 8 进行编译。
【问题讨论】:
-
检查this接受的答案的最后评论。
标签: java reflection