4

我在分配给我的项目中遇到了这段代码(当然是简化的)。

方法选项 1

public myType getSomething(final int pTeamId) {
    this.teamId = pTeamId;
    final ClassABC classABC = new ClassABC(pTeamId);
    ...
    return myType;
}

请注意输入参数pTeamId是如何teamId在方法的第一行中分配给私有数据成员的。请注意,此teamId数据成员有 getter 和 setter 方法(为简单起见,我没有费心将其包括在内。只要知道它们是标准的 getter/setter 对)。

所以我想我可以用不同的方式编写这个方法,我调用我刚刚设置的数据成员的getter,而不是像方法选项1中那样使用直接传入的输入参数:

方法选项 2

public myType getSomething(final int pTeamId) {
    this.teamId = pTeamId;
    final ClassABC classABC = new ClassABC(this.getTeamId());
    ...
    return myType;
}

我意识到这个问题对某些人来说可能看起来微不足道和/或愚蠢,但是我在我正在修改的大型代码库中经常遇到这种情况,所以我很好奇哪种方法是解决这个问题的“正确”方法,方法选项 1 或方法选项 2。

我遇到了这个线程,但它针对 JavaScript:getter 函数的速度与直接访问

我的第一个倾向是使用方法选项 1,但我真的没有很好的理由,除了“它看起来更快......”。

其他人可以提供更好的理由吗?

具体来说,

1)在这种情况下是否有适当/首选的约定/技术/实践?

2)为什么一种选择比另一种更好?他们平等吗?是否存在性能问题?等等

有没有我没有问的问题?(或者这一切都是过度分析)?

任何见解将不胜感激。

4

1 回答 1

4

getter 可以在其中包含逻辑,例如不返回null而是空字符串。与二传手相同。

当您直接操作变量时,您不会执行该逻辑。

如果有人覆盖了 getter 和 setter 逻辑,这也可能是一个问题。(您可以通过将它们设为最终来禁止这样做)但这不是常见的做法!(我会更进一步,称之为反模式)

我建议总是调用 getter/setter。并且没有真正的性能损失

于 2013-10-29T22:29:38.460 回答