Я читал об этом в последнее время здесь на SO (и я не могу найти ссылку прямо сейчас, но это один из тех «почему динамические языки хорошо?» Сообщения, и большой ответ на S. Lott со многими комментариями), и ответ:
Вы могли бы. В Groovy, в частности, вы можете определить интерфейсы в Java или Groovy и реализовать их. Тем не менее, с утиным типом (который позволяет Groovy, но также допускает явные типы), многие люди скажут «зачем беспокоиться»? Источником является его собственная документация, интерфейс находится в источнике, «используйте источник» и т. Д.
Лично меня это раздражает - мне нравится время компиляции (или действительно, dev-time), которое дает Java я, но это еще одна дискуссия. Если вы используете Groovy, это потому, что вы хотите написать этот блестящий и четкий код, который исходит из утиного ввода. В этом случае следует избегать интерфейсов, кроме случаев, когда это необходимо.
Где они необходимы? Между частями программы и в Public API для программы (хотя они также могут быть абстрактными классами). В противном случае, я бы сказал, что вы должны стараться избегать их на языках с утиным языком. Это заставляет вас писать документы в классах или писать код, который настолько ясен, что это одно и то же.
Я думаю, что это ужасная практика, ОДНАКО, это часть перехода парадигмы к динамичным языкам.И я думаю, что если вы избегаете достаточно отделять интерфейс от реализации, вы поймете «почему» за ним. Я все еще этого не делаю, хотя он имеет много общего с не повторяющимся кодом (поддерживающим DRY).
Edit: Получил некоторую ясность вдали от компьютера :) Одна из главных причин, чтобы не отделяться интерфейс от реализации настолько, что вы отойти от зависимости от типов. В утином, как вы знаете, меня не волнует, является ли он исполнителем интерфейса Vehicle
(например). Мне все равно, если у него есть метод go
с двумя параметрами. Итак, чем больше вы работаете с интерфейсами, тем больше вы пишете Java в Groovy («вы можете писать Fortran на любом языке»). Этого следует избегать, так как новые языки открывают вам новые вещи.
Большое спасибо. Очень хороший ответ. Я не буду их использовать! –
@ Мартин, спасибо, я добавил свой ответ, чтобы лучше объяснить. –