我有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 B
。 func2
中的Class B
执行HttpRequest
并返回响应。是否需要在HttpClient
中将Class B
维护为实例变量,或者将其作为参数传递给func2
。是的,我必须根据设计在B
每次创建一个func1
的新实例。
答案 0 :(得分:2)
构造函数用于初始化类的字段,因此如果要将obj
传递给类B
的构造函数,那么obj
应该是B类中的一个字段,即obj
维持与B
的HAS-A关系。
您提到的另一种情况是,当您将obj
作为方法(如func2
)参数传递时,您通常会在func2
次计算中使用它。
因此,您需要检查obj
是否有意义作为B类的字段,以便可以将其初始化为构造函数的一部分。所以,这一切都取决于班级B
的设计。
另外,回答你的问题是,只考虑面向对象世界中obj
和class B
之间的关系,更重要的是,如果你选择像{{1}这样的课程, },A
,obj等。您无法轻松应用/理解面向对象的概念。 相反,请考虑现实世界的类和对象,例如B
或class BankAccount
或class Product
等。
答案 1 :(得分:-1)
由于你只在func2中使用obj,我建议将它作为参数传递给方法。这将允许对象更快地被垃圾收集,而不是等待B被销毁。但是,如果经常使用该方法,则可能会降低性能。无法用所提供的信息来判断。
您可以使用基准测试来测试性能并比较项目中的两种方法。