ISO C ++ запрещает объявление мультимножества без типа

Существует случай, когда это действительно работает в соответствии с правилами разрешения. Если один из интерфейсов расширяет один из других.

Используя пример сверху:

public interface I2 extends I1 {
    default String getGreeting() {
        return "Good Afternoon!";
    }
}

Результат будет:

Добрый день!

Однако я считаю, что это будет большой проблемой. Вся причина для интерфейсов по умолчанию заключается в том, чтобы позволить разработчикам библиотеки развивать apis без нарушения исполнителей.

Понятно, что они не позволяют методам компилироваться без структуры наследования через расширение, потому что разработчик библиотеки может потенциально злоупотреблять поведением.

Тем не менее, это может быть самопровозглашено. Если класс реализует два интерфейса, которые не связаны с иерархическим представлением, но оба определяют одну и ту же подпись по умолчанию, тогда класс, который расширяет оба интерфейса, не будет компилироваться. (как показано выше)

Можно предположить, что два разных разработчиков библиотеки могли бы принять решение добавлять методы по умолчанию в разное время, используя общие подписи; на самом деле, вероятно, это произойдет в библиотеках, которые реализуют подобные концепции, такие как математические библиотеки. Если вам повезет, что вы используете оба интерфейса в одном классе, вы будете нарушены при обновлении.

-11
задан Yu Hao 7 August 2015 в 16:19
поделиться