为什么有人会在java 1.8的接口中定义静态方法?



为什么有人会在 JAVA 1.8 的接口中定义静态方法?

我需要知道静态方法派上用场的不同示例/用例/要求。

接口中的静态方法如何对开发人员有益?

接口中的静态方法有许多用例。不过,到目前为止,最常见的是工厂方法,这些方法可以轻松创建其各自接口的实例。

请考虑以下示例:

Comparator.comparing
List.of
Set.of
Stream.of, Stream.generate

如果接口中没有这些工厂方法,则不同的实现类中将有太多构造函数调用。

其中一些示例仅在 Java 版本 9 中添加,但该功能开启了许多可能性。

这些静态方法也用于不同的目的。现在可以在正确的位置实现Collections.sort这样的方法,Collection.sort,从而避免不必要的额外类。

最常见的是工厂类和实用程序类。

除了另一个答案中的工厂示例之外,请考虑Collections类 - 这在 JDK 中已经存在了十多年,但如果从第 1 天起就可以在Collection接口上定义静态方法,则永远不需要。

在这里,我找到了很好的解释,为什么我们在接口中有静态方法: http://www.baeldung.com/java-static-default-methods

静态接口方法背后的思想是提供一个简单的 使我们能够提高 通过将相关方法放在一个地方进行设计,而无需 必须创建一个对象。

抽象类几乎可以做同样的事情。主要 区别在于抽象类可以具有 构造函数、状态和行为。

此外,接口中的静态方法可以分组 相关的效用方法,无需创建人工效用 只是静态方法的占位符的类。

所以是的,其中一个示例是,您可以选择直接在接口中定义相关的静态方法,而不是为某些行为创建实用程序类,计算与您的接口相关。因此,您将功能分组到正确的位置。避免其他类

public interface Vehicle {
static int getHorsePower(int rpm, int torque) {
return (rpm * torque) / 5252;
}
}   
Vehicle.getHorsePower(2500, 480));

public interface Cube {
static double volume(double a){
return a * a * a;
}
static double surface(double a){
return 6*a*a;
}
}

最新更新