Необходим устаревший сервер с обновлением TLS

Это возможно только в Java 8. В Спецификация языка Java 7 §9.4 он явно указывает:

Это ошибка времени компиляции, если метод, объявленный в интерфейсе, объявлен static, потому что статические методы не могут быть абстрактными.

blockquote>

Таким образом, в Java 7 статические методы в интерфейсах не могут существовать .

Если вы перейдете к Спецификации языка Java 8 §9.4.3 , вы увидите, что он говорит:

Статический метод также имеет тело блока, который обеспечивает реализацию метода.

blockquote>

Таким образом, он явно заявляет, что в Java 8 они могут существовать .

Я даже пытался запустите ваш точный код в Java 1.7.0_45, но он дал мне ошибку «модификатор static не разрешен здесь».


Вот цитата прямо из Java 8 Методы по умолчанию (Изучение языка Java> Интерфейсы и наследование) :

Статические методы

В additi по умолчанию, вы можете определить статические методы в интерфейсах. (Статический метод - это метод, который связан с классом, в котором он определен, а не с каким-либо объектом. Каждый экземпляр класса использует свои статические методы.) Это упрощает организацию вспомогательных методов в ваших библиотеках; вы можете сохранять статические методы, специфичные для интерфейса в одном и том же интерфейсе, а не в отдельном классе. В следующем примере определяется статический метод, который извлекает объект ZoneId , соответствующий идентификатору часового пояса; он использует часовой пояс системы по умолчанию, если нет объекта ZoneId, соответствующего данному идентификатору. (В результате вы можете упростить метод getZonedDateTime):

public interface TimeClient {
    // ...
    static public 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 public ZonedDateTime getZonedDateTime(String zoneString) {
        return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));
    }    
}

Как и статические методы в классах, вы указываете, что определение метода в интерфейсе является статическим методом с ключевым словом static в начале подписи метода. Все декларации методов в интерфейсе, включая статические методы, неявно public, поэтому вы можете опустить модификатор public.

blockquote>

-1
задан 0cean_ 13 July 2018 в 12:18
поделиться