Soy MUY nuevo en la programación OOP, así que pido disculpas de antemano si esta es una pregunta estúpida/irrelevante.
A continuación se muestra un constructor de objetos muy simple en JavaScript
function Class(assign_to_a, assign_to_b){ this.a=assign_to_a; this.b=assign_to_b; } object=new Class(2,3);Siento que me estoy repitiendo un poco. Ya nombré el atributo del objeto dentro de la clase, entonces, ¿por qué necesito volver a escribir el mismo nombre (ligeramente alterado) en un parámetro cuyo único propósito es asignarlo a un atributo que ya tiene un nombre descriptivo?
Para comprender mejor lo que estoy tratando de lograr, JavaScript ya ofrece una solución ordenada para esto:
function Class(){ this.a=arguments[0]; this.b=arguments[1]; } object=new Class(2,3);De esta manera, no tendré que inventar/reescribir los nombres de los parámetros, cuando ya sé que todos los argumentos se asignarán a un atributo del objeto al momento de la creación.
Mi problema es que no creo que muchos otros idiomas tengan un objeto de argumentos como JavaScript (aunque podría estar equivocado al respecto), así que tendré que encontrar otra solución. En este momento, estoy tratando de crear la misma clase en Java.
public class Class{ int a, b; public Class(int assign_to_a, int assign_to_b){ a = assign_to_a; b = assign_to_a; } public static void main(String[] args) { Class object = new Class(2, 3); } }¿Hay alguna forma de solucionar la idea de nombres repetitivos para los parámetros del constructor de objetos, similar a lo que hice en JavaScript, o es algo que simplemente tendré que soportar?
En lugar de crear varios parámetros, puede hacer que el constructor tome solo un argumento: una ArrayList . Luego, puede establecer las propiedades privadas y públicas del objeto sacándolas de la ArrayList del constructor. En Java, esta parece ser la coincidencia más cercana al "objeto de argumentos" de JavaScript (en términos de flexibilidad de tipos).
No codifico en Java, pero según su ejemplo, supongo que podría verse así:
public class Class{ int a, b; public Class(ArrayList ary){ a = ary[0]; b = ary[1]; } public static void main(String[] args) { ArrayList ary = new ArrayList(); ary.add(2); ary.add(3); Class object = new Class(ary); } }No tengo idea de si eso se compilará, pero espero que sea lo suficientemente bueno para transmitir el concepto.
Por lo que sé, no puede evitar especificar los argumentos en una firma de método en Java.
Pero creo que es una gran característica de Java, porque verifica el tipo de parámetros en el momento de la compilación y evita todos los problemas que surgen cuando pasa los argumentos incorrectos a una función.
Si desea evitar el código repetitivo y repetitivo, hay muchas bibliotecas para ayudar, como "Proyecto Lombok".