作为参数传递或创建实例。哪个是好的编程习惯?

时间:2017-03-24 18:24:14

标签: java parameter-passing instance

我有class A我需要在Object obj中将function func2传递给class B。 B类的obj需要func2

class A {
   Object obj;
   .
   .
   public void func1() {
        B b = new B(obj);
        b.func2();
   }
}

class A {
   Object obj;
   .
   .
   public void func1() {
        B b = new B();
        b.func2(obj);
   }
}

我仅在obj class B使用了func2。 哪个是良好的编程习惯,要么将obj作为参数传递给func2,要么在B类中创建Object的实例,并在B类的构造函数中初始化Object。使用这两种方法并没有什么不同? 感谢对此的任何意见。

更新

为了澄清我的用例,Class A配置HttpClient并将HttpClient的实例传递给Class Bfunc2中的Class B执行HttpRequest并返回响应。是否需要在HttpClient中将Class B维护为实例变量,或者将其作为参数传递给func2。是的,我必须根据设计在B每次创建一个func1的新实例。

2 个答案:

答案 0 :(得分:2)

构造函数用于初始化类的字段,因此如果要将obj传递给类B的构造函数,那么obj应该是B类中的一个字段,即obj维持与B的HAS-A关系。

您提到的另一种情况是,当您将obj作为方法(如func2)参数传递时,您通常会在func2次计算中使用它。

因此,您需要检查obj是否有意义作为B类的字段,以便可以将其初始化为构造函数的一部分。所以,这一切都取决于班级B的设计。

另外,回答你的问题是,只考虑面向对象世界中objclass B之间的关系,更重要的是,如果你选择像{{1}这样的课程, },A,obj等。您无法轻松应用/理解面向对象的概念相反,请考虑现实世界的类和对象,例如Bclass BankAccountclass Product等。

答案 1 :(得分:-1)

由于你只在func2中使用obj,我建议将它作为参数传递给方法。这将允许对象更快地被垃圾收集,而不是等待B被销毁。但是,如果经常使用该方法,则可能会降低性能。无法用所提供的信息来判断。

您可以使用基准测试来测试性能并比较项目中的两种方法。