问题描述
我正在尝试一些与使用函数式接口的方法引用相关的事情。我想使用有界接收器和无界接收器将字符串转换为大写。
虽然我已经理解了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);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)