私有方法与静态私有方法
您是否有私有的静态方法来帮助您将算法分解为更小的部分? 我做。 每当我编写一个新方法时,我就会意识到它可以是一个新类。 当然,我不会从所有课程中选修课程,但这必须是目标。 私有静态方法不可重用,而类则可重用,这是它们之间的主要区别,并且至关重要。
这是一个简单类的示例:
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
这个类,并且可以为其创建单元测试。 以前,我们无法使用私有静态方法来做到这一点。
明白了吗? 我已经为自己确定的经验法则是, 每个私有静态方法都是新类的理想选择。 这就是为什么我们在EO中根本没有它们的原因。
顺便说一下, 公共静态方法是另一回事。 它们也是邪恶的,但是出于不同的原因 。
您可能还会发现这些相关的帖子很有趣: 对象行为一定不可配置 ; 对象可以成为朋友吗? ; 只有一个主要的建设者 ;
翻译自: https://www.javacodegeeks.com/2017/02/private-static-method-candidate-new-class.html
私有方法与静态私有方法