【问题标题】:Is there any performance decrease in java, for extending classes for "no" reason?java中是否有任何性能下降,因为“无”原因扩展类?
【发布时间】:2015-07-28 02:53:56
【问题描述】:

我有一个在很多情况下都很有用的 Vector3i 类,但我发现自己扩展了它以使用类型系统来防止错误。

例如,我可能有一个“以自我为中心”的vector3i,它是世界上一个对象的局部,还有一个世界坐标vector3i。

两者自然不兼容,没有转换,彼此毫无意义。

使用True Hungarian Notation 会是一个很好的情况,但我正在扩展类并且没有添加新功能。

考虑到 JVM/Hotspots 优化,我是否会招致性能损失?

【问题讨论】:

  • 请记住,Java IDE 已经消除了匈牙利表示法的大部分所谓优势,因为 Java 是一种可以推理的语言(与 C/C++ 不同)。
  • 可以推理吗?没看懂,还是说java的打字系统?
  • 主要是类型系统。 IDE 可以明确说明某个变量/方法返回的类型是什么。

标签: java type-conversion jvm-hotspot hungarian-notation


【解决方案1】:

继承是一种强大的工具,但这种力量是有代价的。继承本身有很多陷阱和问题。特别是,它会破坏封装,如果不小心实现,可能会导致代码脆弱。

Java 中的继承机制已经持续发展了超过 15 年。您可以依靠它来快速高效。 您的数据模型需要继承时,没有与性能相关的重要原因。

对于您的情况,通过组合而不是通过继承来表示您的功能可能更有意义(换句话说,不是让 ClassB 扩展 ClassA,而是让 ClassA 成为 ClassB 中的实例字段,然后将方法调用委托给封装的对象)。你至少应该考虑一下。与继承相比,组合产生的代码更健壮,更不脆弱。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2015-11-23
    • 1970-01-01
    • 2015-08-21
    • 2019-06-22
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多