Iniciar sesión

Ver la versión completa : [JAVA] Parámetros intocables



pakoito
11/06/2008, 18:08
private static void movim(ListaMov []lis){
ListaMov act, aux;
act = sacar(lis);
aux = act;
mov_s(lis, aux);
}

private static void mov_s(ListaMov []l, ListaMov actual){
actual.posicion = 2;
}

Lo que quiero que es que act no cambie, cosa que gracias a los parámetros de Java hace SIEMPRE. Final no sirve y por lo que veis el típico auxiliar tampoco.

Ñuño Martínez
11/06/2008, 18:28
Yo sé poco de java, pero como está basado en C tal vez se pueda hacer así:
private static void movim(ListaMov []lis)
{
static ListaMov act = sacar(lis);
ListaMov aux;

aux = act;
mov_s(lis, aux);
} La asignación de "act" se ejecuta sólo una vez independientemente de las veces que llames al método. Lo que no sé es si se ejecutará al inicializar el programa o al llamar al método por primera vez.

¿Es esto lo que buscabas?

[edit] Ná, si es como C debería ser así.

pakoito
11/06/2008, 18:41
[edit] Ná, si es como C debería ser así.La cosa es que no es como C, aquí solo se pasa por valor los tipos simples. Las clases pasan el valor de una referencia con lo cual si modificas dicha referencia en cualquier sitio dicha referencia permanecerá alterada. Buscaba algo más tipo el const de c++, pero gracias de todas formas.

otto_xd
11/06/2008, 18:52
Como una clase estatica con atributos estaticos, sigue variando??

Hace mucho que no toco java, pero mira alguna propiedad para los atributos de la clase.

Saludos

pakoito
11/06/2008, 18:55
Esto no es un atributo de clase, por lo que "illegal modifier for parameter act, only final is permitted". De todas formas he hehco la perrada para probarlo y STATIC no sirve para eso.

Ñuño Martínez
11/06/2008, 19:00
Las clases pasan el valor de una referencia con lo cual si modificas dicha referencia en cualquier sitio dicha referencia permanecerá alterada. Ah, pues es verdad. Bueno, ¿y esto?
private static void movim(ListaMov []lis)
{
static ListaMov act = new ListaMov (sacar(lis));
ListaMov aux;

aux = act;
mov_s(lis, aux);
} Evidentemente ListaMov ha de tener un constructor de copia.

pakoito
11/06/2008, 19:09
Ese si me ha servido, gracias. Ya puedo calcular rangos de movimiento. Thank god.