13

在我学习 Java 标准版的时候,getter 和 setter 函数经常被用来隐藏变量并减少对它们的直接访问。有几个消息来源告诉我,在 Android 中你不应该使用这些函数,而只能直接修改变量。原因是在 Android 中使用 getter 和 setter 时会因开销而导致性能损失。导致更多的内存使用并减慢系统速度。

有没有道理呢?如果有,为什么使用 getter 和 setter 会造成性能损失?

4

3 回答 3

9

在此处找到的文档中,使用 getter 和 setter 在 android 中是一个坏主意。正如它所说,

这在 Android 上是个坏主意。虚拟方法调用很昂贵,比实例字段查找要贵得多。遵循常见的面向对象编程实践并在公共接口中使用 getter 和 setter 是合理的,但在类中,您应该始终直接访问字段。

在此处查找有关性能的更多信息。

于 2012-12-19T02:33:06.190 回答
7

根据 Google android 团队提供的性能提示:

如果没有 JIT,直接字段访问比调用普通 getter 快大约 3 倍。使用 JIT(直接字段访问与访问本地一样便宜),直接字段访问比调用普通 getter 快约 7 倍。

但是,我确实同意良好的编码实践更为重要,并且团队还提到:

请注意,如果您使用 ProGuard,则可以两全其美,因为 ProGuard 可以为您内联访问器。

因此我认为可以使用 getter 和 setter ;)

参考

于 2012-12-19T02:35:40.187 回答
4

setter 和 getter 的性能损失可以忽略不计。公共字段是不好的做法,违反了数据封装和信息隐藏的面向对象原则。

使用 setter 或 getter 需要一个属性调用,而不是直接访问该字段。这没什么,所以不用担心——专注于编写好的代码。

编辑:

为了澄清,这是来自其他海报引用的同一个 android 文档:

遵循常见的面向对象编程实践并在公共接口中使用 getter 和 setter 是合理的,但在类中,您应该始终直接访问字段。

换句话说,您仍然需要 getter 和 setter。您应该尽量避免从包含这些方法的类中调用它们,因为您可以直接访问该字段。

于 2012-12-19T02:30:53.163 回答