在Java 8中,为什么不能使用方法引用将Math.random()转换为Math :: random

san*_*3hi 2 java lambda java-8 method-reference

这有效

Supplier<Double> random1 = () -> Math.random();
Run Code Online (Sandbox Code Playgroud)

为什么这样不起作用:

Supplier<Double> random2 = () -> Math::random
Run Code Online (Sandbox Code Playgroud)

Nam*_*man 8

仅使用方法引用即可,例如:

Supplier<Double> random2 = Math::random
Run Code Online (Sandbox Code Playgroud)

因为它已经代表了Supplier<Double>

在另一方面,你目前使用的符号将代表SupplierSupplier<Double> 如:

Supplier<Supplier<Double>> random2 = () -> Math::random;
Run Code Online (Sandbox Code Playgroud)