栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

为什么应该少用静态(static)方法:静态方法的三大问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么应该少用静态(static)方法:静态方法的三大问题

这里写目录标题
  • 背景
  • 静态方法的三大问题
    • 问题 1:测试困难
    • 问题 2:不灵活
    • 问题 3:静态传染
  • 小结

背景

静态方法非常常见,比如很多工具类中都会有大量静态方法。

之前我对这种现象习以为常,直到最近发生的几件事让我决定以后要尽量避免用静态方法。

下面就来看看静态方法的三大问题。

(这里以 Java 为例,但相信很多语言应该都一样。)

静态方法的三大问题 问题 1:测试困难

相比常规方法,在 Java 中对静态方法进行 mock 要复杂一些。Mockito 直到 3.4.0 版本才支持 mock 静态方法。

不过,这实在是三个问题里最轻的一个了。

问题 2:不灵活

面向对象语言的精髓就是依赖抽象,而不是依赖实现。在 Java 中,可以通过接口或者抽象类来实现这一点。

而静态方法则不具备这一灵活性。比如,组件 A 调用了组件 B 的静态方法 staticMethodFromB,那么当需求发生调整,需要调用组件 C 的静态方法 staticMethodFromC 来替换 staticMethodFromB 的时候,组件 A 也必须调整。

如果只是一个组件 A 来调用,那倒还好,如果是几十上百个组件都需要切换呢?那就非常头疼了。对于普通方法我们可以使用依赖注入的方式实现统一替换,但这不适用于静态方法。

问题 3:静态传染

如果一个普通方法 methodA 需要调用另一个方法 methodB,那么 methodB 可以是普通方法或者静态方法;

如果一个静态方法 staticMethodA 需要调用另一个方法 methodB,那么 methodB 也必须是静态的。

这就导致,你引入了一个静态方法,可能就意味着出现越来越多静态方法。。

最近就碰到了一件这样的事:有个类 SomeClass 里几乎全是静态方法,可是忽然要加一个功能,这个功能需要注入一个对象,所以不能以静态方式完成了。。于是几乎需要把 SomeClass 里所有方法都从静态改成普通,以及修改所有调用者。。这是一个非常耗时且容易出错的过程!

所以这里奉劝大家,用静态方法真的要慎重!!

小结

我现在觉得,只有在完全完全确定一个方法不会有结构调整,与系统中其他部分几乎没有关联时,才可以考虑把它写成静态方法。

否则,不要用静态方法!

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号