Java 作为参数传递或创建实例。哪一个是好的编程实践?
我有Java 作为参数传递或创建实例。哪一个是好的编程实践?,java,parameter-passing,instance,Java,Parameter Passing,Instance,我有A类,需要将对象obj传递给B类中的函数func2。B类的func2中需要obj class A { Object obj; . . public void func1() { B b = new B(obj); b.func2(); } } 或 我仅在func2中使用obj在B类中。 将obj作为参数传递给func2,或者在类B中创建Object的实例,并在类B的构造函数中初始化Object,这是一种很好的编程实践。或者使用这
A类
,需要将对象obj
传递给B类
中的函数func2
。B类的func2
中需要obj
class A {
Object obj;
.
.
public void func1() {
B b = new B(obj);
b.func2();
}
}
或
我仅在func2
中使用obj
在B类
中。
将obj
作为参数传递给func2
,或者在类B中创建Object
的实例,并在类B的构造函数中初始化Object
,这是一种很好的编程实践。或者使用这两种方法都没有区别?
感谢您对此的任何意见
更新
为了澄清我的用例,
Class A
配置HttpClient
,并将HttpClient
的实例传递给Class B
<类中的code>func2执行HttpRequest
并返回响应。是否需要将HttpClient
作为实例变量维护在Class B
中,或者将其作为参数传递给func2
。是的,我必须根据设计每次在func1
中创建B
的新实例。由于您仅在func2中使用obj,我建议将其作为参数传递给方法。这将允许更快地对对象进行垃圾收集,而不是等待B被销毁。但是,如果频繁使用该方法,则可能会降低性能。根据所提供的信息是无法判断的
您可以在项目中使用基准测试来测试性能并比较这两种方法。构造函数用于初始化类的字段,因此如果您将
obj
传递给类B
的构造函数,则obj
应该是类B内的字段,即。,obj
维护与B
的HAS-A关系
您提到的另一种情况是,当您将obj
作为方法(如func2
)参数传递时,通常在func2
计算中使用它
因此,您需要检查obj
作为类B的字段是否有意义,以便它可以作为构造函数的一部分进行初始化。因此,这完全取决于类B
的设计
另外,要回答您的问题,只需考虑在面向对象的世界中
obj
和类B
之间的关系,更重要的是,如果您选择A
、B
、obj等类,则考虑。。您无法轻松应用/理解面向对象的概念<更确切地说,请考虑真实世界类和对象<强> > <代码>类银行帐户< /代码>或<代码>类产品< /代码>或<代码>类机器< /代码>等。完全取决于是否需要<代码> Obj/<代码>,或者仅在代码< >函数2>(< /代码>)期间关心它。它在逻辑上是否是B
状态的一部分?您是否可以在同一个实例上多次调用func2
,并为其提供不同的对象以供使用?这个问题太模糊了,现在还不能回答。@azurefrog:我只在func2期间需要它。这就是我所说的“我只在func2中使用了类B中的obj”。@JonSkeet:对于A
的实例,我只会有一个B
的实例,并调用一个func2
。这就是为什么我没有提到多个电话的原因。如果您需要更多信息,请告诉我。它仍然非常模糊,因为我们不知道它是否在逻辑上是B状态的一部分。它是上下文敏感的,并且您没有提供任何上下文。我非常怀疑你的类实际上是A和B,或者你的方法叫做func2。实名将提供有关上下文的信息…JVM自动处理垃圾收集。感谢您的回复。你是在用描述性的方式提出我的问题。因为问题是哪种方法更好,而您正在解释我在B类
中需要做什么,这取决于我选择的方法。而B类
的设计并不取决于如何获得obj
,因为它只在func2
中使用,而且只使用一次。我希望问题现在更清楚了。同样,这个问题的答案是,只要考虑一下在面向对象的世界中obj
和class B
之间的关系,同样,如果你使用像A、B、obj等一般类的话。。你不容易理解这个概念。相反,以现实世界中的类和对象为例。如果这有帮助,您可以接受我的答案,并用我的用例更新问题。还有什么理由吗?
class A {
Object obj;
.
.
public void func1() {
B b = new B();
b.func2(obj);
}
}