实例方法中的静态变量 - 如何解决这个问题?

Posted

技术标签:

【中文标题】实例方法中的静态变量 - 如何解决这个问题?【英文标题】:Static variables inside instance methods - How to fix that? 【发布时间】:2012-08-10 02:42:03 【问题描述】:

最近我继承了 10 年前的代码库,其中包含一些有趣的模式。其中包括实例方法中的静态变量。仅实例化了该类的单个实例,我几乎找不到理由证明实例方法中存在这些静态变量。

    您是否设计过带有静态变量的实例方法?你的理由是什么?

    如果这种模式被认为不好,那么如何修复它?

注意:此问题与Static variables in instance methods无关

编辑:

一些阅读:

    static class and singleton http://objectmentor.com/resources/articles/SingletonAndMonostate.pdf http://www.semantics.org/once_weakly/w01_expanding_monostate.pdf

【问题讨论】:

【参考方案1】:
    这是 singleton 模式的经典 C++ 实现,在 Scott Meyers 的一本 C++ 书籍中进行了描述。 单例是controversial pattern,因此对于单例的好坏没有全行业的共识。

单例的替代方案是纯静态对象。这个question 讨论得很好。

【讨论】:

+1 谢谢。我发现了这个:***.com/questions/720744/static-class-and-singleton 我也从你的回答中推断出:如果人们无法在好与坏之间做出决定 => 该技术是有争议的:P【参考方案2】:

我唯一一次在可实例化类中使用静态字段是作为常量。

一般来说,您可能希望将您的类创建为完全静态的或完全可实例化的(您可能希望保持静态的常量除外)。对于单例类,它们的行为方式几乎相同。混合这两种技术的危险在于,如果您决定让该类不再是单例类,您可能会在现在的多实例类中遇到一些奇怪的行为。

【讨论】:

【参考方案3】:

拥有一个静态变量在过程函数中很有用,因为它可以用作一种具有有限范围的全局变量。

我可以看到在方法中执行此类操作的唯一原因是让变量在多次调用中保持不变,而不必声明没有其他用途的成员变量。老实说,我觉得这只是懒惰的编程,应该避免。

【讨论】:

+1 同意这是惰性编程。而且这不是过程编程,这是 OOP :) 我知道,我只是指出一个可能有用的案例。

以上是关于实例方法中的静态变量 - 如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 静态方法和实例方法的区别 (图表)

java中的成员变量类变量,成员方法类方法 属性和方法区别

java中的成员变量、类变量,成员方法、类方法各是啥,怎么区分,

python中的实例方法静态方法类方法类变量和实例变量

static静态变量

python的静态成员变量实例成员变量静态方法类方法实例方法