假设我们有一个名为x的全局变量,如下所示:
public class test
{
private int x = 0;
//lots of code here...
}
现在假设我们想要在某个任意点改变类测试中的x值(而不是在类外部)。
有两种方法可以做到这一点:
使用void方法:
public class test
{
private int x = 0;
//lots of code here...
changeX();
private void changeX()
{
// calculate stuff
this.x = newXValue;
}
}
使用int类型方法:
public class test
{
private int x = 0;
//lots of code here...
x = changeX();
private int changeX()
{
// calculate stuff
return = newXValue;
}
}
有什么理由说我为什么要选择一个而不是另一个?安全原因?可读性?
我在整个程序中都发生了这种情况,并且无法决定使用哪种约定。
答案 0 :(得分:1)
如果我们在这里谈论私有东西(私有方法和私有字段),那么我几乎总是更喜欢该方法的功能版本:返回值。
如果您可以将所有计算封装在此方法的主体中,那么我认为没有理由强制它更新私有字段。这些方法应该做一件事,做得好。只需计算并返回该值,并让调用代码在您的类中的其他地方做任何它喜欢的事情,因为该代码将知道一般情况。
但是,您显然会将方法名称更改为calculateY()
,其中Y not 引用您的字段名称,而不是它所拥有的数据(字段) X将被命名为描述它如何对类有用,而Y将描述它是如何计算的,根据用例,它可能是也可能不是2种不同的东西。
答案 1 :(得分:0)
只要您的代码对该类保密,我认为没有理由存在安全问题。我个人会选择该方法的void版本,因为任何调用changeX()方法的人也可以直接访问x(所有这些都在同一个类中)。返回int打开了一个局部变量在其上执行操作的可能性,该变量应该在类变量上执行。