2011-08-14 6 views
7

Esto es algo que no puedo decir Estoy sorprendido de que no funcione, pero de todos modos es interesante para mí encontrar la explicación de este caso . Imaginemos que tenemos un objeto:Inicializando un objeto Java en un método separado: por qué esto no funcionará

SomeClass someClass = null; 

y un método que se llevará a este objeto como un parámetro para inicializarlo:

public void initialize(SomeClass someClass) { 
    someClass = new SomeClass(); 
} 

Y luego, cuando llamamos:

initialize(someClass); 
System.out.println("" + someClass); 

Se se imprimirá:

null 

¡Gracias por tus respuestas!

+0

posible duplicado de [¿Pasa Java por referencia?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – Mat

+0

posible duplicado de [¿Puedo pasar parámetros por referencia en Java? ?] (http://stackoverflow.com/questions/1068760/can-i-pass-parameters-by-reference-in-java) –

+0

no hay signo de interrogación –

Respuesta

9

Es imposible de hacer en Java. En C#, pasaría el parámetro con la palabra clave ref o out. No hay tales palabras clave en java. Puede ver esta pregunta para más detalles: Can I pass parameters by reference in Java?

Dicho sea de paso, por esa misma razón no puede escribir una función de intercambio en java que intercambie dos enteros.

1

Como mencionó Armen, lo que quieres hacer no es posible de esta manera. ¿Por qué no utilizar un factory method?

0

y un método que se llevará a este objeto como un parámetro para inicializarlo:

El método no tiene un objeto como un parámetro en su caso. Toma una referencia que apunta a nulo. Luego copia esta referencia y la señala a una nueva instancia de SomeClass. Pero, obviamente, la referencia que pasó como parámetro aún apunta a nulo.

Cuestiones relacionadas