java - 函数 ref 作为 arg 的行为不明确
问题描述
我在下面的给定代码上有一个模棱两可的行为:
public class Main {
public static void main(String[] args) {
labo(Main::myFunction);
labo(Main::myFunctionWithNoArgs);//Compiletime exception!!!
labo(String::toUpperCase);//Compiled line!!!
}
public static void labo(Function<String,String> function){
System.out.println(function.apply("test"));
}
public static String myFunction(String arg){
return arg;
}
public static String myFunctionWithNoArgs(){
return "";
}
}
我的问题是:我不明白为什么我没有得到 arg String::toUpperCase 的编译时异常,而 Main::myFunctionWithNoArgs 没有,即使 toUpperCase() 是一个没有 args 的方法,与 myFunctionWithNoArgs()
解决方案
String::toUpperCase
在这种情况下等价s -> s.toUpperCase()
于,即它是一个函数 from String
to String
。
这里的“参数”是方法的接收者,即String
转换为大写的投注。
推荐阅读
- python - 如何修复python中找不到的模块
- java - 如何在 printhelp 中显示一个选项可以被请求多次?
- python - 如何使用 python 多处理使类变量在 windows 和 linux 上的行为相同?
- curl - 如何修复 AWS EC2 卷曲错误 303 查看其他
- groovy - 如何从groovy中的地图中获取最后一个KEY?
- akka - 如何从入口返回值
- android - RecyclerView 中的 CustomView 出现故障(项目被交换、消失或重复)
- xcode - react-native 0.60.4 xcode 构建失败
- html - 100% 高度不适用于移动视图上的身体背景图像
- python - np.abs() 和 pd.TimedeltaIndex 为列表中的 pd.TimedeltaIndex(['0 days']) 抛出错误