单一方法类与接口实现

亚历克斯·索宁

想象一下以下界面:

public interface ActivationFunction {
    double calculate(double value);
}

有两个类似的实现:

基于类:

public class SignFunction implements ActivationFunction {
    @Override
    public double calculate(double value) {
        return value >= 0.0 ? 1.0 : -1.0;
    }
}
...
final SignFunction signFunction = new SignFunction();

基于接口:

public interface SignFunction extends ActivationFunction {
    @Override
    default double calculate(double value) {
        return value >= 0.0 ? 1.0 : -1.0;
    }
}
...
final SignFunction signFunction = new SignFunction() {
};

其中哪一个更可取,为什么?

感谢您的意见

马特·海利威尔

两者都工作得很好,所以在某种程度上,这只是个人喜好以及如何在您的应用程序中使用的问题。在类似的情况下,我会选择一种机制并使用它,直到很明显一种方法比另一种方法更合适。

如果您现在想尝试做出“正确”的决定,那么接口机制的主要优点(在我看来)是它允许类的行为由多个接口组成。您可以拥有一个从多个接口获取函数实现的类,而您无法通过普通的旧类继承来实现。

另一个优点是它强制函数是无状态的,这使得调试和理解它们更容易。也不太可能有人不必要地将状态引入到您的函数中。

正如本文的另一个答案所示,不利之处在于并非所有开发人员都意识到您可以在接口中实现,因此您可能会从其他开发人员那里得到一些反馈。

您还需要在某处实例化一个对象,以便能够调用接口上的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

何时在Java中使用单一方法接口

设计问题:单一方法的Java类可以吗?

单一方法上课-最佳方法?

单一方法中的多个等待

单一方法克隆派生类型

使用遮罩合并图像的单一方法

是否有一种从Enumeration对象创建Collection的单一方法?

什么是更快的方法?线程或“单一方法”-Java

匿名和授权用户的Spring @RestController单一方法

使用单一方法从多个输入字段计算年龄

针对复杂类型的单一方法的C ++模板专业化

可能通过单一方法返回不同类型的对象

使用哪种单一方法检查:空白?&& !错误的?

Python中单一方法的性能衡量技术之间的差异

运行时反射-使用单一方法提取符号

Angular.js中Ajax单一方法的体系结构

maven-surefire-plugin 运行单一方法,但在课堂上失败

使用单一方法检测按钮阵列上的点击

单一方法可产生多个新的Scanner返回

通过单一方法但使用多个查询的数据库连接

在处理接口时,类型声明是返回结构指针的唯一方法吗?

从 SQL Server 检索各种存储过程数据的单一方法,如何处理参数?

如何通过单一方法从不同索引中删除数组中的元素?

具有方法参数超类的接口实现

VSTO Aplication.Factory 类的接口实现缺少方法

使用硬件计时器是实现流程计划的唯一方法吗?

如何使用SFINAE创建同一方法的2个不同实现

联接子句是实现此目的的唯一方法,而CTE无法做到吗?

从含有不同的类中调用一方法图形克[JAVA]