java - getDeclaredMethods() + 创建数组 = 额外方法?

原文 标签 java reflection

我正在使用反射,我注意到了意想不到的方法。我将其完全缩小到重现问题的这几行代码:

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 种方法:mainsomeMethod() .但我看到另一个:
private static java.lang.Integer[] Scratch.lambda$someMethod$0(int)

如果我删除 someMethod 中唯一的一行,由于调用 getDeclaredMethods,我只得到 2 个方法,正如我所料。

这是什么lamba方法?我不能直接在 Scratch 上调用它,静态方法不可用( Integer[] result = Scratch.lambda$someMethod$0(0); )。它是某种私有(private)方法吗? getDeclaredMethods() 上的文档没有说明这种行为。

我正在使用 Java 8 进行编译。

最佳答案

查看 stream.toArray 方法的签名:

toArray(IntFunction<A> generator)

Scratch.lambda$someMethod$0(int) 只是您作为参数传递给 stream.toArray 方法的 lambda 表达式。

关于java - getDeclaredMethods() + 创建数组 = 额外方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398233/

相关文章:

c# - Entity Framework 6-创建动态存储库不起作用/对象不匹配目标

.net - 访问修饰符也会影响反射吗?

java - 如何在 Java 中使用 Kotlin 反射

另一个窗口中的 Java 窗口

java - 使用org.kohsuke.github.GHUserSearchBuilder时API速率限制错误

c# - 抽象类的单元测试保护方法

JRuby 中的 Java 反射 : Determining class of java. util.regex.Pattern

java - 所有 fragment 都在 Activity 时加载

java - FFT后,Android值全为0

java eclipse indigo执行可执行jar的问题(项目外部文件夹中的属性文件)