我在分配给我的项目中遇到过这段代码(当然是经过简化的)。
方法选项 1
public myType getSomething(final int pTeamId) {
this.teamId = pTeamId;
final ClassABC classABC = new ClassABC(pTeamId);
...
return myType;
}
请注意输入参数 pTeamId
是如何在该方法的第一行中分配给私有(private)数据成员 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:speed of getter function vs direct access
我的第一个倾向是使用方法选项 1,但除了“它看起来更快...”之外,我确实没有充分的理由这样做。
其他人可以提供更好的理由吗?
具体而言,
1) 在这种情况下是否有适当/首选的约定/技术/实践?
和
2) 为什么一个选项比另一个更好?他们平等吗?有性能问题吗?等等
有没有我没有问的问题? (或者这都是过度分析)?
如有任何见解,我们将不胜感激。
最佳答案
getter 可以包含逻辑,比如不返回 null
而是返回一个空字符串。
与二传手相同。
当您直接操作变量时,您不会执行该逻辑。
如果有人覆盖了 getter 和 setter 逻辑,这也可能是一个问题。 (你可以通过将它们设为 final 来禁止这样做)但这不是常见的做法! (我会更进一步并将其称为反模式)
我建议总是调用 getters/setters。并且没有真正的性能损失
关于java - getter 方法 vs 直接使用输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670347/