您是否有私有的静态方法来帮助您将算法分解为更小的部分? 我做。 每次编写新方法时,我都会意识到它可以是一个新类。 当然,我不会从所有课程中选修课程,但这是目标。 私有静态方法不可重用,而类则可重用,这是它们之间的主要区别,并且至关重要。

保罗·托马斯·安德森(2012)

这是一个简单类的示例:

class Token {private String key;private String secret;String encoded() {return "key="+ URLEncoder.encode(key, "UTF-8")+ "&secret="+ URLEncoder.encode(secret, "UTF-8");}
}

有明显的代码重复,对吗? 解决该问题的最简单方法是引入私有静态方法:

class Token {private String key;private String secret;String encoded() {return "key="+ Token.encoded(key)+ "&secret="+ Token.encoded(secret);}private static String encoded(String text) {return URLEncoder.encode(text, "UTF-8");}
}

现在看起来好多了。 但是,如果我们有另一个需要完全相同功能的类会发生什么呢? 我们将不得不复制并粘贴此私有静态方法encoded() ,对吗?

更好的选择是引入一个新的Encoded类,该类实现了我们想要共享的功能:

class Encoded {private final String raw;@Overridepublic String toString() {return URLEncoder.encode(this.raw, "UTF-8");}
}

然后:

class Token {private String key;private String secret;String encoded() {return "key="+ new Encoded(key)+ "&secret="+ new Encoded(secret);}
}

现在,此功能是1)可重用,和2)可测试的。 我们可以在许多其他地方轻松使用Encoded这个类,并且可以为其创建单元测试。 以前,我们无法使用private static方法来做到这一点。

明白了吗? 我已经为自己确定的经验法则是, 每个私有静态方法都是新类的理想选择。 这就是为什么我们在EO中根本没有它们的原因。

顺便说一下, 公共静态方法是另一回事。 它们也是邪恶的,但是出于不同的原因 。

您可能还会发现这些相关的帖子很有趣: 对象行为一定不可配置 ; 对象可以成为朋友吗? ; 只有一个主要的建设者 ;

翻译自: https://www.javacodegeeks.com/2017/02/private-static-method-candidate-new-class.html

每个私有静态方法都是新类的候选人相关推荐

  1. 私有方法与静态私有方法_每个私有静态方法都是新类的候选人

    私有方法与静态私有方法 您是否有私有的静态方法来帮助您将算法分解为更小的部分? 我做. 每当我编写一个新方法时,我就会意识到它可以是一个新类. 当然,我不会从所有课程中选修课程,但这必须是目标. 私有 ...

  2. python面向对象3-多层继承、super()、私有权限、多态、类属性实例属性、类方法和静态方法

    python面向对象1–类.对象.属性.魔法方法 python面向对象2–综合案例:烤地瓜.搬家具.单继承.多继承 python面向对象3-多层继承.super().私有权限.多态.类属性实例属性.类 ...

  3. 私有静态方法private static method-值得用吗?

    用Resharper的同学都知道,如果你写了一个私有函数,这个函数没有访问类里面的其他参数和方法,那么它建议你标记这个方法为私有静态方法,提示是这样的: 值得这样做吗?看看微软的建议: After y ...

  4. java中静态方法可以私有吗_java私有静态方法

    一.private static 我们都知道想要保护一些数据,只要设置为private,并且在java中static多少有"共享"的意味存在,那么既然已经private了,为什么还 ...

  5. 离群?异常?新类?开集?分布外检测?一文搞懂其间异同!

    来源:机器之心 本文约4400字,建议阅读8分钟 重磅综述让你对开放世界领域有全新的认识! 你是否也曾迷惑于「离群检测,异常检测,新类检测,开集识别,分布外检测」之间错综复杂的关系?你是否也想要解决开 ...

  6. 在R.java中新建自定义的新类

    今天在写Android程序的时候,需要引用R.java文件中一些资源.如:R.color.color1 但是我弄了半天都不能在R.java文件中新建color的新类,原因很简单,R.java是不能被编 ...

  7. ICCV2021 Oral | UNO:用于“新类发现”的统一目标函数,简化训练流程!已开源!...

    关注公众号,发现CV技术之美 ▊ 写在前面 在本文中,作者研究了新类发现(Novel Class Discovery (NCD))的问题.NCD的目标是通过利用包含不同但相关类的标记集的先验知识来推断 ...

  8. 通过反射创建新类示例的两种方式及比较

    通过反射创建新类示例的两种方式及比较 作者BLOG:http://blog.csdn.net/fenglibing 通过反射创建新的类示例,有两种方式: Class.newInstance() Con ...

  9. java 构造函数 单例_Java中的私有构造函数和单例类 - Break易站

    Java 构造函数 Java中的私有构造函数和单例类 我们首先分析下面的问题: 我们可以有私人构造函数吗? 正如你可以很容易猜到的,就像我们可以为构造函数提供访问说明符一样.如果它是私人的,那么它只能 ...

最新文章

  1. 第四条:通过私有构造器强化不可实例化的能力
  2. python raise 引起的异常
  3. java保留有效数字
  4. VS Code 使用小技巧
  5. Mybatis 拦截器介绍
  6. 嵌入式Linux系统编程学习之十四signal信号处理机制
  7. ROW_NUMBER() OVER 排序函数的基本用法
  8. Linux 使用 shell 脚本处理字符串
  9. 贴片式元器件焊接方法
  10. js如何获取中午12点的时间
  11. C++ P1082 同余方程
  12. [Linux] USB-Storage驱动 源码阅读笔记(一)
  13. 承德算命大师解读命与运的奥秘,承德算命大师预测指导
  14. HTTP Live Streaming直播源代码软件开发(iOS直播)技术分析与实现
  15. 用unity做游戏用java_Unity游戏开始崩溃
  16. 服务器传输文件多路同传,迅雷发布4.0版本 支持多点服务器同传(图)
  17. Win Video Editor Pro 2022 v9.9.4.6 Windows视频编辑工具集合
  18. css html属性,HTML/CSS从零开始-常用属性
  19. vlc连接视频(摄像头)方法步骤(一)
  20. 【system verilog】time-slot,仿真的竞争与冒险,对齐与采样

热门文章

  1. ConcurrentHashMap能完全替代HashTable吗?
  2. 致我们最最最最最最最最最最最最最优秀的班主任——王老师
  3. 2017蓝桥杯省赛---java---A---2(9数算式)
  4. 2017蓝桥杯省赛---java---B---7(日期问题)
  5. 2017蓝桥杯省赛---java---B---2(纸牌三角形)
  6. html图片通过照片查看器打开图片,在Windows7中打开照片,提示“Windows 照片查看器无法显示此图片,因为计算机上...
  7. 按逆向思维定义软件测试,软件测试基础相关概念
  8. android 处理http状态码,OkHttp(Retrofit)对于http状态码202的处理
  9. eclipse maven 项目发布到tomcat 报错 Failed to scan JAR [file:/C:/xxxxx.jar] from WEB-INF/lib
  10. 基于openfire源码开发插件