将实例变量传递给实例方法而不是直接访问它们?

时间:2013-04-18 19:00:57

标签: java code-design

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

String instanceMember;

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

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

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

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

如果您发现自己编写的递归代码修改了一个以实例变量开头的参数,那么在很多情况下,最好制作方法private static并添加public实例启动递归链并收集结果的方法。

答案 2 :(得分:0)

如果这些方法是操纵持久成员变量状态的公共方法,那么你不应该真正传递它。例如,如果你必须做类似下面的事情,它应该由方法直接操作而不是传入:

myObject.SomeMethod(myObject.instanceMember, 15);

这应该只是:

myObject.SomeMethod(15);

如果某些内容可能会因每次调用而改变(例如,上述方法中的神秘15),那么您需要传递它。

答案 3 :(得分:0)

这将取决于你如何使用它。如果你的课程用量很少,那么就没有明显的区别。

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

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

请遵循您的编码惯例,不要担心。当它真的重要时,你会明白地知道答案。