public class Main {
interface Capitalizer {
public String capitalize(String name);
}
public String toUpperCase() {
return "ALLCAPS";
}
public static void main(String[] args) {
Capitalizer c = String::toUpperCase; //This works
c = Main::toUpperCase; //Compile error
}
}
两者都是具有相同签名的实例方法。为什么一个起作用而另一个不起作用?
签名String::toUpperCase
:String toUpperCase();
引用方法有3种构造:
object::instanceMethod
Class::staticMethod
Class::instanceMethod
该行:
Capitalizer c = String::toUpperCase; //This works
使用3’rd结构- Class::instanceMethod
。在这种情况下, 第一个参数成为该方法的目标
。此构造等效于(翻译)以下Lambda:
Capitalizer = (String x) -> x.toUpperCase();
这Lambda表达式工作,因为拉姆达 得到String
的参数,并返回String
结果-所要求的Capitalizer
接口。
该行:
c = Main::toUpperCase; //Compile error
转换为:
(Main m) -> m.toUpperCase();
哪个不适用于该Capitalizer
界面。您可以更改Capitalizer
为:
interface Capitalizer {
public String capitalize(Main name);
}
此更改Main::toUpperCase
后将进行编译。
我对方法引用在Java8中是如何工作的有些困惑。我编写了下面的代码段用于过滤文件夹中的隐藏文件。他们正在产生正确的结果。我不理解->listFiles方法的方法签名是如何在这个代码段的选项2中工作的。 这是我在Java8文档中发现的
我编写了一些通用bean转换,它们一起使用来转换一个复杂的bean。有时输入bean具有双向引用,转换器陷入无限循环。我该怎么处理呢? 例如,输入是一个与B bean有关系的bean,而B bean恰恰与A实例有关系。当转换A对象开始时,B转换器调用转换A中的B字段,并且在转换B对象时,A转换器调用转换B类中的A字段,如您所知,转换器陷入无限循环。想想bean之间更复杂的关系,即关系图有两个以上的
问题内容: 使用以下DataFrame,如何在不让Pandas将移位后的值分配给其他索引值的情况下基于索引来移位“ beyer”列? 生产… 问题在于,佩恩特得到了分配最后一位战士的啤酒。相反,我希望它像这样… 问题答案: 使用应用转移到各组分别:(感谢Jeff指出这个简化) 如果您有一个多索引,则可以通过将一系列或级别名称传递给 参数来对多个级别进行分组。
我正在对我的表数据实现引导折叠。但是,当我按下按钮时,表数据确实会折叠,但没有转换。我已经确认我包括了jQuery,我正在使用collapse和not collapse in,我正在使用aria hidden=“true”data toggle=“collapse”数据目标和id。这不是屏幕宽度问题。 这是一个链接到我的代码笔https://codepen.io/mezavanessa/pen/R
问题内容: 我对Python引用感到困惑。考虑以下示例: 我的任务: 编辑列表中的每个元素 类似地: 在python中,所有内容都按引用进行操作,那么何时创建新对象?我们总是需要和从模块,使对象副本? 请说清楚。 问题答案: 在Python中,变量不是容纳事物的盒子,它是指向对象的名称。在您的代码中: ->将名称绑定到字典 ->将名称绑定到列表 ->将名称绑定到另一个列表 您的第三行不是在改变
本文向大家介绍vue-cli如何引入bootstrap工具的方法,包括了vue-cli如何引入bootstrap工具的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍了vue-cli如何引入bootstrap工具的方法,分享给大家,也给自己留个笔记。 以下操作以正常安装node环境为前提。 1.引入jq: 在npm控制台中,进入项目目录,然后输入指令npm install jquery --