为什么任何人在JAVA 1.8中的接口中定义静态方法?
我需要知道静态方法会派上用场的不同示例/用例/要求。
界面中的静态方法如何对开发人员有益?
答案 0 :(得分:11)
接口中的静态方法有很多用例。但是,到目前为止,最常见的是工厂方法,可以轻松创建各自接口的实例。
请考虑以下示例:
Comparator.comparing
List.of
Set.of
Stream.of, Stream.generate
在接口中没有这些工厂方法,在不同的实现类中会有太多的构造函数调用。
其中一些示例仅在Java版本9中添加,但该功能开启了许多可能性。
这些静态方法也用于不同的目的。现在可以在正确的位置Collections.sort
实施Collection.sort
这样的方法,从而避免不必要的额外课程。
答案 1 :(得分:3)
最常见的是工厂和公用事业类。
除了另一个答案中的工厂示例之外,请考虑Collections
类 - 这已经在JDK中使用了十多年,但如果静态方法可以在上面定义,则永远不需要从第1天开始的Collection
界面。
答案 2 :(得分:2)
在这里,我找到了很好的解释为什么我们在接口中有静态方法: 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;
}
}