猿问

应该在声明或构造函数中实例化实例变量吗?

应该在声明或构造函数中实例化实例变量吗?

这两种方法都有什么好处吗?

例1:

class A {
    B b = new B();}

例2:

class A {
    B b;

    A() {
         b = new B();
    }}


米脂
浏览 538回答 3
3回答

慕的地10843

另一个选择是使用依赖注入.class A{    B b;    A(B b) {       this.b = b;    }}这消除了创建B的构造函数中的A..这将使您的代码更易于测试和长期维护。这样做的目的是减少这两个类之间的耦合。A和B..这给您带来的好处是,您现在可以传递任何扩展的对象。B(或工具)B如果它是一个接口)A的构造函数,它将工作。B对象的调用者公开它。A构造函数你将不得不考虑利益是否值得这样的权衡,但在许多情况下,它们是值得的。

慕斯709654

我今天被烧得很有趣:class MyClass extends FooClass {     String a = null;     public MyClass() {         super();     // Superclass calls init();     }     @Override     protected void init() {         super.init();         if (something)             a = getStringYadaYada();     }}看到错误了吗?原来a = null初始化器被调用后超类构造函数被调用。由于超类构造函数调用init(),所以a是尾随被a = null初始化。
随时随地看视频慕课网APP

相关分类

Java
我要回答