Почему интерфейс в Java-8 позволил получить основной метод?
Почему интерфейс позволяет иметь main
метод в Java 8
?
Как указано в приведенном ниже коде, он отлично работает и правильно выводит результат.
public interface Temp {
public static void main(String args[]){
System.out.println("Hello");
}
}
ВЫХОД (после запуска Temp.java)
Hello
В чем разница между основным методом interface
и class
?
В настоящее время он ведет себя как класс и I выполнил interface
с помощью основного метода.
Зачем нам это нужно?
ИЗМЕНИТЬ
Добавление большего к существующему вопросу из комментария, изложенного ниже (Брайан Гетц)
Если мы теперь явно запретили методы main
, что static
методы допустимы в interfaces
(или, что то же самое, исключить 'interface classes'
в качестве целей для java-пусковой установки.)
Ответы
Ответ 1
Так как Java 8, в интерфейсах разрешены статические методы.
main() - статический метод.
Следовательно, main() разрешено в интерфейсах.
Мы не нуждаемся в, так как раньше это было недопустимо, и все же мы выжили. Но поскольку статические методы, по определению, не привязаны к экземпляру класса, а к самому классу, имеет смысл разрешить их в интерфейсах. Он позволяет определять методы утилиты, связанные с интерфейсом (например, те, что найдены в Collections
, например), в самом интерфейсе, а не в отдельном классе).
Нет никакой разницы между статическими методами класса и статическими методами интерфейса.
Ответ 2
Я второй ответ @jb-nizet. Для этого нет "отчаянной необходимости", но он устраняет ненужное ограничение. Например. одним из примеров является то, что вы можете теперь объявить метод factory в интерфейсе:
public interface SomeService {
public static SomeService getInstance() {
// e.g. resolve via service provider interface
}
...
}
Перед Java 8 нам всегда нужен отдельный класс factory. Один из любимых примеров - API для API приложений Google.
Ответ 3
В Java 8 интерфейс может иметь статические методы. Поскольку основной метод также является статическим методом, он это позволит.
Мы можем объявлять общие вспомогательные методы, используя эти статические методы.