Java 单一方法类与接口实现
想象一下下面的界面:Java 单一方法类与接口实现,java,Java,想象一下下面的界面: public interface ActivationFunction { double calculate(double value); } 使用两种类似的实现: 基于类: public class SignFunction implements ActivationFunction { @Override public double calculate(double value) { return value >= 0.0
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() {
};
基于接口:
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() {
};
哪一个更可取?为什么?
感谢您的意见这两种方法都很好,因此在某种程度上,这只是个人喜好的问题,以及如何在您的应用程序中使用。在类似的情况下,我会选择一种机制并使用它,直到一种方法比另一种更合适 如果您现在想尝试做出“正确”的决定,那么接口机制的主要优点(无论如何,我认为)是它允许类的行为由多个接口组成。您可以有一个类,该类从多个接口获取函数的实现,而这不能通过普通的旧类继承来实现 另一个优点是它强制函数是无状态的,这使得调试它们和理解它们更容易。也不太可能有人不必要地将状态引入到您的函数中 正如本文的另一个答案所说明的,缺点是并非所有开发人员都意识到可以在接口中实现,因此可能会受到其他开发人员的一些回击
您还需要在某处实例化一个对象,以便能够调用接口上的方法 都不是。
@functioninterface
的全部目的是验证它是否可以用作lambda:final SignFunction SignFunction=(value)value>=0.0?1.0 : -1.0;代码>@SeanPatrickFloyd可能还有其他实现:StepFunction、SigmoidFunction&etc@AlexSaunin那么?如果所有这些类都只是实现calculate的函数,为什么不将SignFunction设为实现ActivationFunction接口的静态类,因为似乎不需要创建对象?仍然没有得到使用lambda与显式子类之间的关系。