2010-03-11 8 views
5

¿Por qué se definió java de modo que los métodos pueden tomar como entrada múltiples parámetros,
pero solo pueden devolver un único objeto (o nulo)?¿Por qué Java puede tomar múltiples parámetros pero puede devolver solo un objeto?

¿Hacía el lenguaje de alguna manera más fácil de implementar o usar?

+0

Realmente no ofrece ninguna solución a una forma eficiente de devolver múltiples argumentos tampoco. Para el registro, si quiero que un método sea capaz de devolver un argumento, paso una matriz en caché (longitud 1) del tipo requerido como argumento y lo configuro como el primer campo; alternativamente, puede devolver una matriz de objetos y usa eso, pero es creación de objetos innecesarios que quieres evitar. –

Respuesta

5

Probablemente porque esta es la forma en que C y C++ lo hacen, y la sintaxis del lenguaje Java es muy similar a (y probablemente se basa en) esos lenguajes.

De hecho, de acuerdo con this article, Gosling se inició mediante la extensión del compilador de C++, así que tiene sentido que seguiría gran parte de la misma sintaxis:

para que el desarrollo de un proceso más independiente de la plataforma (y así acomodar la demanda del mercado de consumo de flexibilidad de la CPU), Gosling comenzó extendiendo el compilador de C++.

5

¿Quizás la intención era que múltiples valores devueltos se encapsularan en un objeto?

+0

No importa el hecho de que los objetos se pasen por referencia. – Paul

0

Mi conjetura sería una convención: eso es lo que hicieron o hicieron los principales lenguajes de OO, así que eso es lo que hizo Java. Sin embargo, el argumento oficial probablemente sería el mismo que el de los cierres: no incluya cosas que puedan nublar la sintaxis estándar para tareas mundanas con tareas que no son realmente necesarias. O tal vez pensaron que un único método debería devolver un conjunto de valores relacionados que deberían/​​podrían entrar en un objeto. O tal vez simplemente no pensaron en ello/tienen el tiempo (tarifa de desarrollador bastante estándar).

En una nota relacionada, he encontrado esta discusión sobre el uso de cierres para burlarse de múltiples retornos: http://weblogs.java.net/blog/brucechapman/archive/2007/11/closures_and_mu.html

4

No sé a ciencia cierta, pero me imagino que Java se ejecuta como cualquier otro tiempo de ejecución basado en la pila. Lo que significa que pasar elementos como parámetros a un método se hace fácilmente simplemente empujándolos a la pila antes de transferir el control al método. Es probable que los valores de retorno se manejen en la VM como C y C++, el valor de retorno siempre se coloca en un registro, que por naturaleza tiene un solo valor.

No es un gran problema, sin embargo, con los genéricos, la devolución de múltiples valores se puede manejar de forma segura devolviendo una instancia de Tuple<type1, type2, type3>, que no es una carga demasiado pesada en la mayoría de los casos .

Cuestiones relacionadas