【问题标题】:Are static methods really necessary for a programming language? [closed]编程语言真的需要静态方法吗? [关闭]
【发布时间】:2012-10-17 16:15:37
【问题描述】:

C# 或 Java 等编程语言具有静态方法,尽管它们非常面向对象。

我知道有很多情况下出于性能或方便的原因使用静态方法,但我不禁想知道是否存在如果不使用静态方法就无法解决的实际编码问题。

我认为这里命名的一些常见情况可能只是“普通”方法,而不是静态方法,例如:

  • mainmain 方法的目的是创建程序的第一个运行线程并启动它。所以这也可能只是一个从 Thread 类派生的对象
  • Loggers:Logger 实现通常使用静态方法。我不明白这一点,因为我可能想用相同的界面将一个记录器换成另一个记录器
  • 数学:乍一看,数学函数似乎确实是静态方法的完美候选者,但在某些情况下,您可能希望透明地将数学库交换为另一个数学库(即,如果您需要更高的性能在 sin() 函数上,如果精度对您的应用程序不重要,您可能希望使用更快、精度更低的算法实现)
  • 单身人士:被许多人认为是不好的做法。如果只需要一个实例,您可能会考虑只创建一个实例。

那么,在哪些情况下真的绝对需要静态方法?

【问题讨论】:

    标签: oop static-methods


    【解决方案1】:

    IMO,在定义工厂以创建给定类型的不同子类型的对象时需要静态方法,其中子类型的选择取决于此静态工厂方法的输入并且对客户端隐藏。

    您的 Logger 示例实际上属于此类,其中实际的 logger 是根据所需的包/类决定的(当然,Logger 上的其他工厂方法采用其他参数来决定要返回的适当 Logger 实例)。

    【讨论】:

    • 非常好的答案。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 2012-09-17
    • 2019-12-22
    • 2011-07-17
    • 2011-03-14
    • 2011-08-20
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多