【问题标题】:Android Activity - Final class or not?Android Activity - 最终课程与否?
【发布时间】:2011-11-27 09:11:47
【问题描述】:

根据这个 SO question 和性能基准

我们可以假设将类定义为public final class 对性能更好。

我们是否应该对 Android 活动做同样的事情,因为它们大多不习惯子类化?

public final class LoginActivity extends Activity { ... }

【问题讨论】:

    标签: java android performance class final


    【解决方案1】:

    将所有类设为抽象类或最终类通常是安全的选择。

    这样一来,是否需要为继承设计一个类就很清楚了。

    如果您后来发现由于某种原因需要从具体(非抽象)类继承 - 这通常表明您的整体设计存在一些不对称性 - 您仍然可以删除 final 关键字并确保您的类适合继承。

    因此,通过这样做,您消除了必须设计所有继承类的浪费,同时您可以获得具有明确意图的可维护代码。

    【讨论】:

    • 是的,你还允许 jvm 在与具体类型一起使用时内联对最终类的方法的调用,所以 - 即使我关于明确意图的论点从我个人看来更重要观点——你可以获得更好的表现。内联确实是一个强大的工具。获得此优势的另一种方法是使用 final 和/或私有方法,因为它们也保证永远不会被覆盖。因此,不要在性能关键的内部循环中使用非最终类的非私有非最终方法:-)
    【解决方案2】:

    我从未见过任何人(包括 Google)在代码中执行此操作。我们被告知 Dalvik VM 本身是高度优化的,因此可以推断出声明 Activities final 不会导致任何明显的性能提升。声明一个类final 通常是出于性能原因以外的原因。

    【讨论】:

    • 是的。我也很少明确地将类声明为最终类,因为这样做会增加视觉混乱。它通常只是数据不可变结构,主要是生成的,我使用 final 通过禁止可能可变的派生类来强制执行不变性。
    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多