【问题标题】:Passing objects in java through constructor通过构造函数在java中传递对象
【发布时间】:2015-12-04 19:58:39
【问题描述】:

更好的是:通过构造函数传递对象并将其保存到另一个类中的新引用,还是通过构造函数直接传递给方法?有什么区别吗?

class A
{ 
  int a;
  int b;
} 

class B
{
  public A refA;

  public B(A refA)
  {
    this.refA = refA;
    methodInB(refA); 
  }

  public void methodInB(A refA)
  {
    ...
  }
}

或者 ---------------------------------------------- ---- 或者

class A
{ 
  int a;
  int b;
} 

class B
{
  public B(A refA)
  {
    methodInB(refA);
  }

  public void methodInB(A refA)
  {
    ...
  }
}

【问题讨论】:

  • 您需要存储的参考吗?在这两种情况下,您都将引用直接传递给方法。存储更少实际上是可取的。
  • 你需要B吗?如果是,请设置它。如果没有,不要。没有“首选”方式,因为它们是两个不同的 sn-ps。
  • 视情况而定。一般来说,我认为第一个是首选。类应该封装它们的行为。但是,在这种情况下,您正在 调用 ctor 的可覆盖方法。这是不好的做法。 methodInB() 应该是私有的或最终的。
  • 你的类B是否需要A类型的类变量?
  • 如果您将 refA 存储为变量,那么为什么还要将其传递给 methodInB?除非 methodInB 将在其他地方与不同的 A 对象一起使用。

标签: java object constructor


【解决方案1】:

这取决于 A 是否是 B 的组成部分,或者方法InB 是否相同。如果我们不将 A 的引用放在 B 中,那么 methodInB 就变成了一种实用方法,最好是静态的。如果它不是一个实用程序,那么它依赖于 A,并且 A 的引用应该放在 B 中。

另外,如果 B 中还有其他方法可能需要对同一个 A 实例进行操作,最好将 A 的引用保存在 B 中。

如果 methodInB 充当实用程序,则应将其放入带有静态修饰符的实用程序类中,该修饰符采用 A 和 B 类型参数。

检查如下:

public class A { }
public class B { }

public class MyUtility {
    public static void methodInB(A a, B b) {
        //operate on a and b
    }
}

//  MyUtility can also have a dependency on A and B both and thus make methodInB a non static methodInB
public class MyUtilityBean {
    private A a;
    private B b;

    public void methodInB() {
        //operate on a and b
    }
}

//Other wise A acts as a dependency of B

public class B {
    private A a;
    public void methodInB() {
        //operate on a
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2017-09-11
    • 1970-01-01
    • 2020-05-24
    • 2021-12-29
    相关资源
    最近更新 更多