我正在尝试一些与使用函数式接口的方法引用相关的事情。我想使用有界接收器和无界接收器将字符串转换为大写。
虽然我已经理解了print1和print2的方法,但我不确定print3是如何编译的。因为 Consumer 有 True
,它接受一个参数并且什么都不返回,而 String 中的 void accept(T t);
类不接受任何参数但返回
字符串。我猜编译器只是检查实际参数是否是 lambda 表达式/MR,形式参数是否是函数接口。正确吗?
toUpperCase()
输出:
package com.learn.boundedtypes;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
public class MRTest
{
public static void main(String[] args)
{
String s = "The quick brown fox jumped over the lazy dog";
print1(s::toUpperCase);
print2(String::toUpperCase, s);
print3(String::toUpperCase, s);
}
public static void print1(Supplier<String> supplier)
{
System.out.println(supplier.get());
}
public static void print2(Function<String, String> function, String s)
{
System.out.println(function.apply(s));
}
public static void print3(Consumer<String> consumer, String s)
{
consumer.accept(s);
System.out.println(s);
}
}