假设我有3个Java类A,B和C
我需要创建一个在A和B中都使用的C类对象,但是分别创建对象的问题是类c的构造函数被调用了2次。但是我想要只调用一次构造函数。
所以我想将A类中创建的对象用于b类。
答案 0 :(得分:16)
因此,创建一次对象,并将其传递给A和B的构造函数:
C c = new C();
A a = new A(c);
B b = new B(c);
...
public class A
{
private final C c;
public A(C c)
{
this.c = c;
}
}
请注意,这是非常在Java中常见的依赖注入形式,这样就可以告诉对象他们的协作者而不是自己构建它们。
答案 1 :(得分:3)
在A和B之外创建对象C,并让A和B的构造函数接受C类的实例。
class A {
public A( C c ) {
....
}
}
class B {
public B( C c ) {
....
}
}
答案 2 :(得分:2)
或者,如果A和B的构造函数不是彼此接近调用,则可以将C类定义为单例。见http://mindprod.com/jgloss/singleton.html
然后你会这样做:A a = new A(C.getInstance());
B b = new B(C.getInstance());
或者,在A
和B
的构造函数中,只需调用getInstance而不是构造函数,即。
// C c = new C();
C c = C.getInstance();
答案 3 :(得分:0)
您想分享一个实例吗?好的,他的怎么样:
C c = new C();
B b = new B(c);
A a = new A(c);
另一种选择是:
B b = new B();
A a = new A(b.c);