OO纯粹主义者通常不赞成静态效用方法。
我想知道人们对用于避免像整个应用程序中的空检查这样简单的实用程序方法的看法。
String.trim()
在null String上调用时抛出NPE。所以我必须这样做:
if(str!=null)
setValue(str.trim());
else
setValue("");
如果我创建一个检查null的实用工具方法怎么办?
setValue(myTrim(str));
public static String myTrim(String str) {
if(str==null) return ""
else return str.trim();
}
我遇到过这样的方法的一个问题是,团队中的一些开发人员可能不喜欢/不知道这个实用程序,并且在进行空比较后可能正在执行staight调用。
这也是你做框架的事吗?如果是,那么人们在其应用程序中创建并正在使用的其他常用实用程序通用方法是什么?
你觉得这两种方法的优点和缺点是什么?
答案 0 :(得分:7)
当现有的库(如Apache Commons Blah Blah Blah)已经编写它时,我倾向于替换本土用途。您可以将代码卸载到其他人的代码,让您专注于软件的重要部分,使您的工作与其他人真正区分开来。但是,如果需要由你编写,那么使用静态方法的实用程序类很棒。
仅供参考,请看StringUtils.trimToEmpty()。祝你好运。
答案 1 :(得分:3)
团队中的一些开发人员可能不喜欢/不知道此实用程序
这就是沟通的好处。我不是指电子邮件。
谈论这些类型的功能,可能其他团队成员也在做同样的事情,而不是通过交流来重复代码和工作。
您可能会找到一种方法来使用这些实用程序方法,甚至一些经验丰富的开发人员已经开发出更成熟的lib或使用第三方。
但无论如何,请与您的团队
进行沟通答案 2 :(得分:3)
我不是OO纯粹主义者。所以我喜欢这样的东西。任何可以更容易编写反映我的意图的代码而不会陷入无关细节的东西。
写下来。自己使用它。不要害羞 - 演示它使你的代码更清晰。最糟糕的情况是,至少 代码中的重复次数会少一些......
答案 3 :(得分:2)
就设计原则而言,有些东西只是逻辑上更静态的方法。如果您正在编写的实用程序类实际上没有任何“状态”,并且使用一堆静态方法使其无法实现更合乎逻辑,那么就这样做。但要确保你的类真的是不可实现的(给它一个私有的构造函数;我看到人们将这个类声明为抽象类,但这并不好,因为人们可以覆盖它)。
您接下来遇到的问题是如果您的班级是项目范围的,则需要将其视为库类。编写库与编写通用代码不同:
答案 4 :(得分:1)
我有一些只包含fave静态方法的类 - 它们做有意义。您可以组合广泛的单元测试来检查任何和所有边界条件。
在你描述的情况下 - 使setValue方法接受发送给它的任何字符串不是更好吗?然后,该方法可以应用默认的空字符串,修剪它,如果值不正确,甚至抛出异常。
该例程上的JavaDoc可以清楚地说明哪些输入有效/无效以及无效输入会发生什么。
不是说这是对的 - 只是另一种观点
答案 5 :(得分:1)
我使用了很多实用功能。有些东西不需要“对象”,但我不喜欢你对trim()的具体例子。
对null的字符串的引用与空字符串非常不同。除非应用程序非常简单,并且您知道您总是希望将空引用读为“”,否则我不会这样做。对于这种情况,我更喜欢:
setValue((str != null) ? str.trim() : "")
对我来说,一个未被捕获的NPE表明应用程序中存在重大错误!