在我学习 Java 标准版的时候,getter 和 setter 函数经常被用来隐藏变量并减少对它们的直接访问。有几个消息来源告诉我,在 Android 中你不应该使用这些函数,而只能直接修改变量。原因是在 Android 中使用 getter 和 setter 时会因开销而导致性能损失。导致更多的内存使用并减慢系统速度。
有没有道理呢?如果有,为什么使用 getter 和 setter 会造成性能损失?
根据 Google android 团队提供的性能提示:
如果没有 JIT,直接字段访问比调用普通 getter 快大约 3 倍。使用 JIT(直接字段访问与访问本地一样便宜),直接字段访问比调用普通 getter 快约 7 倍。
但是,我确实同意良好的编码实践更为重要,并且团队还提到:
请注意,如果您使用 ProGuard,则可以两全其美,因为 ProGuard 可以为您内联访问器。
因此我认为可以使用 getter 和 setter ;)
setter 和 getter 的性能损失可以忽略不计。公共字段是不好的做法,违反了数据封装和信息隐藏的面向对象原则。
使用 setter 或 getter 需要一个属性调用,而不是直接访问该字段。这没什么,所以不用担心——专注于编写好的代码。
编辑:
为了澄清,这是来自其他海报引用的同一个 android 文档:
遵循常见的面向对象编程实践并在公共接口中使用 getter 和 setter 是合理的,但在类中,您应该始终直接访问字段。
换句话说,您仍然需要 getter 和 setter。您应该尽量避免从包含这些方法的类中调用它们,因为您可以直接访问该字段。