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 个方法,正如我所期望的那样。

这个兰巴方法是什么?我无法直接在 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# - 如何通过反射调用基类的方法?

c# - 可以赋值null吗?

Java(反)序列化过程

java - 更新现有的 JobDataMap

java - 通过 Java 中的包含检查爬虫 IP 列表的最快方法

class - 如何从隐式 ClassTag[T] 获取 Class[T]?

c# - 通过反射删除路由事件处理程序?

java - 如何让Java编译器在编译后的代码中生成行号

java循环并将值添加到 map

java - 使用反射查找 JNI 中的 Java 类是否为 Final