7

想象一下我有一个带有实例成员的类

String instanceMember;

此外,我有 4 个实例方法访问此成员。现在我想知道是否有任何真正的优点/缺点可以直接从实例方法访问实例成员或将实例成员作为参数传递给每个实例方法?

4

4 回答 4

6

将值作为参数传递意味着您将使用参数值而不是封装值执行计算。

如果您要对封装数据进行操作,则没有理由将其作为参数。

于 2013-04-18T19:05:17.120 回答
2

首先拥有实例变量的原因是避免将它们作为参数传递:您的实例方法可以“免费”访问它们,因为它们已经在方法的范围内。

但是,将实例变量传递给方法有两个原因:

  • 方法是static——类方法不能访问实例变量,所以需要显式传递,或者传递要操作的对象
  • 您需要使用按值传递语义- 换句话说,您希望修改传入的值,并且希望避免创建局部变量。当方法是递归的时,通常会出现这种情况。

如果您发现自己编写的递归代码修改了作为实例变量开始的参数,那么在许多情况下,创建您的方法private static并添加一个public实例方法来启动递归链并收集结果可能是个好主意。

于 2013-04-18T19:05:47.030 回答
0

这在很大程度上取决于您如何使用它。如果你的类的使用不频繁,那么不会有明显的区别。

如果您大量使用类实例,并且通过许多线程,那么在某些情况下,将其作为参数传递会更快一些。

通常实例成员由类成员直接访问,具有静态函数的例外(由于显而易见的原因)。

因此,请遵循您的编码约定,不要担心。到真正重要的时候,您将牢记答案。

于 2013-04-18T19:06:42.627 回答
0

如果这些方法是操纵持久成员变量状态的公共方法,那么您实际上不应该传递它。例如,如果您必须执行以下操作,则可能应该直接由方法操作而不是传入:

myObject.SomeMethod(myObject.instanceMember, 15);

这应该只是:

myObject.SomeMethod(15);

如果它在每次调用时可能会发生变化(例如,15上面方法中的神秘),你会想要传递它。

于 2013-04-18T19:04:13.877 回答