Class A
{
B b1=new B();
}
Class B
{
A a1=new A();
}
Böyle bir şeyden bahsediyorum? Mümkün mü?2 A ve B sınıfı olduğunu varsayalım, A'da A ve A'da A'nın bir nesnesini yaratmak mümkün mü?
Class A
{
B b1=new B();
}
Class B
{
A a1=new A();
}
Böyle bir şeyden bahsediyorum? Mümkün mü?2 A ve B sınıfı olduğunu varsayalım, A'da A ve A'da A'nın bir nesnesini yaratmak mümkün mü?
Evet, yapabilirsiniz. Aşağıdaki gayet derler:
class A {
B b1 = new B();
public A() {
System.out.println("A constructor");
}
}
class B {
A a1 = new A();
public B() {
System.out.println("B constructor");
}
}
public class HelloWorld {
public static void main(String []args) {
A a0 = new A();
System.out.println("Done");
}
}
Ancak çıktıda görüldüğü gibi, genellikle kötü bir fikir:
Exception in thread "main" java.lang.StackOverflowError
at B.<init>(HelloWorld.java:8)
at A.<init>(HelloWorld.java:3)
at B.<init>(HelloWorld.java:8)
at A.<init>(HelloWorld.java:3)
at B.<init>(HelloWorld.java:8)
:
at A.<init>(HelloWorld.java:3)
at B.<init>(HelloWorld.java:8)
at A.<init>(HelloWorld.java:3)
at B.<init>(HelloWorld.java:8)
bir A
denemeden inşaat bir B
oluşturmak ve bu gerçeği B
yapılışı bir A
oluşturmaya çalışır, sonunda sonsuz miktarda yer kaplayacaksınız, sonuçta yığın alanı tükeniyor. güvenle iki nesneyi olabilir
Sen birbirlerine atıfta ama bu genelde inşaat aşaması sonrasında bitti, gibi bir şey:
class A {
B b;
public A() {
System.out.println("A constructor");
}
public void setOther(B bx) {
System.out.println("A linker");
b = bx;
}
}
class B {
A a;
public B() {
System.out.println("B constructor");
}
public void setOther(A ax) {
System.out.println("B linker");
a = ax;
}
}
public class HelloWorld{
public static void main(String []args){
A a0 = new A();
B b0 = new B();
a0.setOther(b0);
b0.setOther(a0);
System.out.println("Done");
}
}
o çıkışı gösterir:
A constructor
B constructor
A linker
B linker
Done
dilidir. Bunun için bir çözüm var mı? – wayne
"Geçici çözüm", neyi başarmak istediğinizi bulmaktır. Kurucusu, sonsuz sayıda nesnenin oluşturulmasına neden olan bir sınıfa sahip olmak istemezsiniz. Fakat, ne istiyorsun? – ajb
Sınıfın her biri, diğer sınıfın kullanması gereken yöntemleri kullanıyor, dolayısıyla diğer sınıfın bir nesnesini oluşturmam gerekiyor. – wayne
Bu Kendinizi kolayca deneyebileceğiniz bir şey gibi görünüyor. – nhouser9
Bu tür bir şey gerektiren bir proje üzerinde çalışıyorum ama programı çalıştırmak mümkün değildi, bu yüzden emin olmak istedim. – wayne
Eclipse sadece bir IDE olduğundan, hangi dilde konuştuğunuzdan bahsetmek yararlı olabilir ... –