recursividad indirecta

tic
13 de Noviembre del 2003
¿c贸mo es posible compilar 2 clases en java que se llaman mutuamente una a la otra?
Y Si no es posible, ¿q soluci贸n tiene?
En pascal me acuerdo q se pod铆a hacer una la declaraci贸n de funciones de un m贸dulo, y eso permit铆a la recursi贸n indirecta para cualquier otro m贸dulo si 茅ste tambi茅n declaraba sus funciones.
Pero en java no veo c贸mo. ¿Es una limitaci贸n del lenguaje?

heihachi
13 de Noviembre del 2003
Seguro que no se puede?
Acabo de crear estas dos clases:

public class B {
A a=new A();
public void f(){
a.f();
}
}

public class A {
B b = new B();
public void f(){
b.f();
}
}
en ficheros diferentes y he compilado sin ningun problema.

Aunque no se si es esto lo que buscas...

Saludos!

tic
13 de Noviembre del 2003
Amigo, pues tienes toda la raz贸n, el c贸digo que indicas compila perfectamente.

Aprovechando ese mismo c贸digo y, miniaturizando mi problema, a m铆 lo que me sigue sin compilar es esto otro:

package AB;

public class A {
B b = new B();
public void f(){
b.f();
}
}

package AB;

public class B {
A a=new A();
public void f(){
a.f();
}
}

LA SALIDA ES:

# javac A.java
A.java:4: cannot resolve symbol
symbol : class B
location: class AB.A
B b = new B();
^
A.java:4: cannot resolve symbol
symbol : class B
location: class AB.A
B b = new B();
^
2 errors

Y los mismos errores al compilar B.java

S贸lo es cambiar el paquete por defecto por otro llamado AB.
Seguramente es una chorrada pero no acabo de verlo.

Por otro lado, acabo de ver que as铆 S脥 que COMPILA:

# javac A.java B.java

GRACIAS, ha sido muy positiva tu ayuda, heihachi.

tic
13 de Noviembre del 2003
Releyendo el post veo que el submit de este formulario tambi茅n tiene una errata en su funcionamiento (veo erratas por todas partes o estoy paranoico...), a saber:
La marquita del segundo error no es en la primera B sino en la segunda B (la del constructor). El copy.paste funciona bien, de eso estoy seguro...:)