Зачем нам нужно указывать имя параметра в интерфейсе?

Когда мы создаем методы интерфейса, нельзя ли сделать что-то вроде java:

void interface_method(Integer,String, /* other parameter */);

Вместо этого я заметил, что нам также нужно указать имена параметров:

void interface_method(Integer i, String s);

Также разработчику интерфейса не нужно иметь то же имя параметра, что и в методе интерфейса.

Я нашел аналогичный вопрос о С# по здесь . Они упоминают один сценарий именованного параметра, но я не нахожу другой соответствующей причины конкретно в java.


person Priyank Doshi    schedule 12.06.2012    source источник
comment
+1: Действительно интересный вопрос. C и C++ не имеют этих требований... действительно не знаю, почему Java это делает.   -  person Heisenbug    schedule 12.06.2012
comment
Вы получите много предложений относительно возможных причин здесь, но это все догадки. Вы спрашиваете не в том месте. Вам нужно спросить Джима Гослинга.   -  person user207421    schedule 13.06.2012


Ответы (3)


С технической точки зрения это было бы не нужно.

Я всегда воспринимал это как нормализацию синтаксиса и помощь в документации.

Таким образом, есть:

  1. Нет причин различать синтаксис методов класса и интерфейса, и
  2. Документация Javadoc по умолчанию может быть сгенерирована с использованием (описательного!) имени параметра.
person Dave Newton    schedule 12.06.2012
comment
+1 Ваше замечание о Javadoc можно сделать еще сильнее: если бы имена параметров были необязательными, то все теги @param должны были бы быть в правильном порядке, а отсутствующие параметры вызвали бы гораздо большую путаницу. - person Sergey Kalinichenko; 31.12.2012

Без имен параметров становится очень трудно различать параметры одного типа.

double divide(double, double);

Соглашение гласит, что вторым параметром будет делитель. Но с именованными параметрами это явно и намного понятнее. В свою очередь, документация может явно использовать имена вместо того, чтобы постоянно говорить «первый параметр» или «второй параметр», пытаясь объяснить, как следует использовать метод и что должен представлять каждый параметр.

person unholysampler    schedule 12.06.2012
comment
если дело в правильном различении параметров, не лучше ли использовать javadoc, а не имя параметра? - person Priyank Doshi; 12.06.2012
comment
@PriyankDoshi ИМО, не совсем так; первым источником документации всегда должен быть код, потому что код — это окончательный артефакт. Javadocs предназначены для предоставления дополнительной информации, отсутствующей в подписи. - person Dave Newton; 12.06.2012
comment
@PriyankDoshi: Также не требуется, чтобы в javadoc параметры были указаны в том же порядке, что и в сигнатуре метода. Можно привести аргумент в пользу того, чтобы сначала перечислить наиболее важный параметр. Кроме того, если вы добавите параметр к методу и поместите его в начало, вся старая документация станет недействительной, поскольку первый параметр больше не относится к одному и тому же. С именами назначение thing1 остается прежним, даже если оно становится вторым параметром. - person unholysampler; 12.06.2012
comment
Верно. Я бы сказал, что это звучит как настоящий ответ. - person Arturas M; 06.12.2016

Мой взгляд на это:

  1. Это в спецификации языка для параметров, чтобы они имели имена;

  2. Интерфейс есть интерфейс, имена помогают передать смысл;

  3. Интерфейс на самом деле не является предварительным объявлением реализации, которая будет следовать, как в C/C++, поэтому сравнение не совсем корректно;

person maksimov    schedule 12.06.2012
comment
1. Если его спецификация языка, они всегда могут сделать исключение для метода интерфейса..! 2. Не будет ли javadoc лучшим вариантом? - person Priyank Doshi; 12.06.2012
comment
@PriyankDoshi, может быть, и будут, но я сомневаюсь. С именами параметров вы вынуждены общаться, с javadoc это необязательно. - person maksimov; 12.06.2012
comment
да может быть дело. Программисты всегда ненавидят документацию. Имя параметра :P может служить этой цели. - person Priyank Doshi; 12.06.2012
comment
Имейте в виду, хардкорных хакеров это не остановит, им по-прежнему разрешено называть свои параметры p1, p2, p3 и т. д. - person maksimov; 12.06.2012