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...:)