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

时间:2018-06-16 16:39:27

标签: java interface java-8 static-methods

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

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

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

3 个答案:

答案 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;
      }
}