为什么Java-8中的接口允许使用main方法?

为什么接口允许在Java 8使用main方法?

如下面的代码所述,它工作正常并正确产生输出。

 public interface Temp { public static void main(String args[]){ System.out.println("Hello"); } } 

输出运行Temp.java后

 Hello 

那么interface主方法和class什么区别?

目前它表现得像一个类, 已经用main方法执行了interface

我们为什么需要这个?


编辑

从下面的评论中添加更多现有问题 (作者Brian Goetz)

我们是否应该明确禁止使用main方法,因为interfaces中允许使用static方法(或者,等效地,将'interface classes'排除为java启动程序的目标。)


从Java 8开始,接口中允许使用静态方法。

main()是一个静态方法。

因此,接口中允许使用main()。

我们不需要这个,因为以前不允许这样做,但我们幸存了下来。 但是,根据定义,静态方法不是绑定到类的实例,而是绑定到类本身,因此在接口中允许它们是有意义的。 它允许在接口本身而不是单独的类中定义与接口相关的实用程序方法(例如,在Collections找到的实用程序方法)。

类静态方法和接口静态方法之间没有区别。

我是@ jb-nizet的答案。 对此没有“绝望的需要”,但它消除了不必要的限制。 例如,您可以在界面中声明工厂方法:

  public interface SomeService { public static SomeService getInstance() { // eg resolve via service provider interface } ... } 

在Java 8之前,我们总是需要一个单独的工厂类。 一个最喜欢的例子是谷歌应用引擎API。

在Java 8中,接口可以具有静态方法。 由于main方法也是静态方法,因此它将允许它。

我们可以使用这些静态方法声明常见的辅助方法。