¿Por qué necesitamos especificar el nombre del parámetro en la interfaz?

Cuando creamos métodos de interfaz, ¿no podemos hacer algo como en Java:

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

En su lugar, me di cuenta de que también necesitamos dar los nombres de los parámetros lile:

void interface_method(Integer i, String s);

Además, el implementador de la interfaz no necesita tener el mismo nombre de parámetro que en el método de interfaz.

Encontré una pregunta similar sobre c# sobre aquí . Mencionan un escenario de parámetro con nombre pero no encuentro ninguna otra razón relevante específicamente en Java.

preguntado el 12 de junio de 12 a las 14:06

+1: Pregunta realmente interesante. C y C ++ no tienen estos requisitos ... realmente no tengo idea de por qué Java los tiene. -

Recibirá muchas sugerencias sobre las posibles razones aquí, pero todo son conjeturas. Estás preguntando en el lugar equivocado. Tendrías que preguntarle a Jim Gosling. -

3 Respuestas

Desde un punto de vista técnico no sería necesario.

Siempre lo he tomado como una normalización de sintaxis y una ayuda de documentación.

De esta manera hay:

  1. No hay razón para diferenciar entre la sintaxis del método de clase y de interfaz, y
  2. La documentación Javadoc predeterminada se puede generar utilizando el nombre del parámetro (¡descriptivo!).

Respondido el 12 de junio de 12 a las 15:06

+1 Su punto sobre Javadoc se puede hacer aún más fuerte: si los nombres de los parámetros fueran opcionales, entonces todos los @param las etiquetas tendrían que estar en el orden correcto, y los parámetros faltantes causarían mucha más confusión. - Serguéi Kalinichenko

Sin nombres de parámetros, se vuelve muy difícil distinguir entre parámetros del mismo tipo.

double divide(double, double);

La convención dice que el segundo parámetro sería el divisor. Pero con parámetros con nombre, es explícito y mucho más claro. A su vez, la documentación puede usar claramente los nombres en lugar de tener que decir continuamente "primer parámetro" o "segundo parámetro" al tratar de explicar cómo se debe usar el método y qué representa cada parámetro.

Respondido el 12 de junio de 12 a las 14:06

si se trata de distinguir adecuadamente entre parámetros, ¿no es mejor a través de javadoc en lugar del nombre del parámetro? - priyank doshi

@PriyankDoshi En mi opinión, no realmente; los en el primer La fuente de documentación siempre debe ser el código, porque el código es el artefacto definitivo. Javadocs son para suministrar adicional información no disponible en la firma. - David Newton

@PriyankDoshi: tampoco es necesario que el javadoc enumere los parámetros en el mismo orden que la firma del método. Se podría hacer un caso para listar el parámetro más importante primero. Además, si agrega un parámetro a un método y lo coloca al principio, toda la documentación anterior se invalida porque el "primer parámetro" ya no se refiere a lo mismo. Con nombres, la intención de thing1 permanece igual incluso si se convierte en el segundo parámetro. - profano

Derecha. Yo diría que esto suena como la respuesta real. - Arturo M

Mi opinión sobre esto:

  1. Esto está en la especificación del idioma para que los parámetros tengan nombres;

  2. Interfaz siendo interfaz, los nombres ayudan a comunicar el significado;

  3. La interfaz no es realmente una declaración directa de implementación que seguirá como en C/C++, por lo que la comparación no es del todo correcta;

Respondido el 12 de junio de 12 a las 15:06

1. Si se trata de una especificación de idioma, siempre pueden hacer una excepción para el método de interfaz..! 2. ¿No será javadoc una mejor opción? - priyank doshi

@PriyankDoshi tal vez lo hagan, pero lo dudo. Con los nombres de los parámetros, está obligado a comunicarse, con javadoc es opcional. - maksimov

sí, puede ser el caso. Los programadores siempre odian la documentación... :P el nombre del parámetro puede servir para este propósito. - priyank doshi

Tenga en cuenta que esto no disuadirá a los "hackers" incondicionales, todavía se les permite llamar a sus parámetros p1, p2, p3, etc. - maksimov

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.