【问题标题】:Class synonyms over inheritance: Performance?继承的类同义词:性能?
【发布时间】:2019-10-03 04:43:05
【问题描述】:

我有一个名字很长的类,例如DatabaseHelper
现在我想缩短这个名字。

1) 我可以重命名课程,然后我就会拥有我想要的。

2) 我可以创建一个同义词类:class Db extends DatabaseHelper:
这里的主体是空的。

这里的质量标准的原因,编码风格的问题

class DatabaseHelper
{
  //some methods
}

现在是同义词类

class Db extends DatabaseHelper
{
  //empty body
}

所以我的问题是:如果我像 2) 那样做,会出现性能问题,
还是 1) 在性能维度上等于 2)?

【问题讨论】:

  • 忘记性能。这只是一件坏事。首先给你的班级起更好的名字。
  • DatabaseHelper 不是一个长名称.... Db 是一个非常短的名称,它不会给用户任何价值(他们不知道它的作用)
  • 是的,你们都是对的,但这不是我的问题^^ 但它是一个很好的设计提示,不要做那样的事情。但我想知道如果我这样做,编译器会做什么

标签: java performance optimization


【解决方案1】:

在某些地方性能可能会变差,因为类层次分析会看到有两个可能的类并放弃。还有其他优化,所有的东西都太复杂了,但如果你想理解它,请阅读lengthy explanation。如果没有,请阅读其中的一部分,看看它有多复杂。

鉴于您正在处理数据库,即某处毫秒级的操作,您将无法衡量纳秒级某处的性能损失。所以算了吧。

请注意,DatabaseHelper 绝不是一个长名称。它很短而且很无用(它可能更清楚)。请注意,Db 可能是Database 的一个很好的快捷方式,但不适用于DatabaseHelper。不是DbH 会做(几乎每个人都可以猜到,“Db”是什么意思,但是对于“DbH”,几乎没有人能猜到;无论如何,不​​需要猜的名字更好)。

请注意,Java 中没有类型同义词,而且不可能。 通过子类化,您得到一个只能在一个方向上互操作的新类。 所以不要这样做!

还要注意,Java 中的性能比预期的要复杂得多。选择好的算法和数据结构很重要,但大多数细节都无关紧要(这个网站充满了诸如“A 比 B 快”之类的问题,典型的正确答案是“忘记它”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2013-11-18
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2015-06-20
    相关资源
    最近更新 更多