Ответ 1
В Java 8 появилась идея реализации методов по умолчанию в интерфейсах:
http://blog.hartveld.com/2013/03/jdk-8-13-interface-default-method.html
Насколько я знаю, вы не можете объявлять статические методы в корпусе интерфейса. Однако случайно я нашел свой собственный код на http://docs.oracle.com/ сайте. Вот ссылка
Namelly
public interface TimeClient
{
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();
static ZoneId getZoneId (String zoneString) {
try {
return ZoneId.of(zoneString);
} catch (DateTimeException e) {
System.err.println("Invalid time zone: " + zoneString +
"; using default time zone instead.");
return ZoneId.systemDefault();
}
}
default ZonedDateTime getZonedDateTime(String zoneString) {
return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));
}
}
этот interface
имеет метод static
getZoneId
Я потерял... может кто-нибудь объяснить пожалуйста
В Java 8 появилась идея реализации методов по умолчанию в интерфейсах:
http://blog.hartveld.com/2013/03/jdk-8-13-interface-default-method.html
Вы являетесь свидетелем двух новых функций в Java 8 здесь:
В примере кода, который вы указываете, getZoneId()
иллюстрирует первую новинку, а .getZoneDateTime()
- вторую.
Вторым, в частности, является то, что позволило расширить интерфейс Collection
с дополнительными методами, такими как .stream()
, например, без нарушения обратной совместимости. См. здесь для иллюстрации.
Первый позволяет избежать написания классов "меток мешков", которые часто существуют только для предоставления устаревших статических методов по интерфейсам. Одним из таких примеров может быть Guava Functions
class (чтобы не смешиваться с Java 8 Function
, который он в основном украл из Guava, а также Predicate
и несколько других)
Начиная с Java 8 вы можете это сделать. Официальный официальный учебник, из которого был получен ваш фрагмент (который был обновлен для Java 8):
Тело интерфейса может содержать абстрактные методы, методы по умолчанию и статические методы. Абстрактному методу в интерфейсе сопровождается точка с запятой, но нет скобок (абстрактный метод не содержит реализации). Методы по умолчанию определяются с помощью модификатора
default
и статических методов с ключевым словомstatic
. Все абстрактные, стандартные и статические методы в интерфейсе являются неявно общедоступными, поэтому вы можете опустить публичный модификатор.
Или из Java 8 JLS раздел 9.4:
Метод по умолчанию - это метод, объявленный в интерфейсе с модификатором
default
; его тело всегда представлено блоком. Он обеспечивает реализацию по умолчанию для любого класса, который реализует интерфейс без переопределения метода. Методы по умолчанию отличаются от конкретных методов, объявленных в классах....
Интерфейс может объявлять статические методы, которые вызываются без ссылки на конкретный объект.
Из спецификации языка Java (Java SE 8 Edition): http://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.4
Интерфейс может объявлять статические методы, которые вызываются без ссылки на конкретный объект.
в Java 8, интерфейсы могут иметь статические методы, а также переопределяемые методы с реализацией по умолчанию. Тем не менее, у них все еще нет полей экземпляров. Эти функции являются частью поддержки выражения лямбда, и вы можете больше узнать о них в части H. JSR 335