java - getter 方法 vs 直接使用输入参数

标签 java eclipse

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

方法选项 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/

相关文章:

java - 将数组的个数相加直到达到某个值

c - 读取输入 - 获取 scanf - 新手

python - Unresolved 导入 : models

java - 线程和重绘()

java - 立即从堆中删除对象

java - Eclipse Design Tab 检测到错误的 Java

java - Android 类的结构/命名

eclipse - 无法在 EGit 中找到存储/应用功能

c# - 从 android 连接 wcf 服务时出错。错误: Failed to connect to/10. 0.2.2

java - Camunda 在启动期间在本地 oracle 数据库上引发错误