当前位置:  开发笔记 > 编程语言 > 正文

回调<P,R>与功能<T,R>之间的区别

如何解决《回调<P,R>与功能<T,R>之间的区别》经验,为你挑选了1个好方法。

回调和函数似乎非常相似.我能找到的唯一重要区别是Function有一些实用的方法来组合函数,而Callback则没有.

在我自己的代码中,我发现自己有时使用一个,有时使用另一个,而没有真正考虑它.果然,他们都乐于接受同样形式的lambdas.

作为Callback一个JavaFX类,我认为它排在第二位,所以我的问题是 - 它为什么被创建?是否有任何具体的理由使用一个而不是另一个?可以安全地投射另一个吗?



1> James_D..:

回调早于功能.("自JavaFX 2.0以来".)JavaFX需要该功能,Java没有它,因此JavaFX定义了它.然后Java 8在更一般的上下文中引入了它.

你不能把一个投射到另一个,因为它们都不是另一个的子类型.但是,您可以通过lambdas将其分配给另一个,因为签名是相同的.

换一种说法:

Callback lengthCB = s -> s.length(); // or String::length
Function lengthFunc = (Function) lengthCB ;

给出了一个类强制转换异常,但是

Callback lengthCB = s -> s.length(); // or String::length
Function lengthFunc = lengthCB::call ;

很好.

至于使用哪个,如果你用lambdas(或方法引用)实现它们,问题通常没有实际意义,因为编译器只会从上下文中推断出类型.

如果您实际上将它们分配给变量,或者使用类定义(而不是lambda)实现接口,那么您将被迫选择一个类型.您应该根据所需的用法和上下文执行此操作:如果要将其传递给需要回调的JavaFX对象,请使用回调,否则使用函数.

如果您将它们定义为类中的字段,则通常应该更喜欢Function,因为它适用于更广泛的上下文.再次,如果它直接用于JavaFX控件,使用a可能更有意义Callback.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有