Many thanks to Tristan Morris for creating a beautiful illustrated hardcover print edition of the site

tcc-case-title
超级专业  超级专业

第六十四案

三乞丐

Java大师皆梦带领三位老僧来到无尽隔间大厅,然后找来三个弟子。

“这个工具方法接受一个雇员ID,用它构造一个特定的URL”,皆梦说到,“逻辑并不简单,但最终归结于文本替代。”

皆梦指向第一位老僧,“这位在持久性层面工作,所有的数据库关键字都是大整数,所以他希望这个方法接受长整数Long。”

皆梦又指向第二位老僧,“这位在业务层面工作,所以采用强数据类型。他希望这个方法接受EmployeeID对象。”

皆梦再指向第三位老僧,“这位在互联网层面工作,所有数据都作为文本处理。他希望这个方法接受文字串String。”

大师然后向三位僧人鞠躬,请弟子们给出他们的解答。

- - -

第一个弟子站起来,“这个方法应该接受String,因为这种表达在方法内部最为有用。对于希望采用Long或者EmployeeID的僧人,他们很容易在相应的对象上调用toString,然后把结果送给这个方法。”

皆梦说:“当乞丐蹲在尘土中祈求一些零钱,你大可以要求他举起他的破碗来接,可是如果那可怜的人没有胳膊呢?”

不及第一个弟子再答,第二个弟子起立了。“调用toString虽然看起来简单,却需要调用者检查null空指针。所以这个方法应该接受对象,这样就可以容纳三种类型中任何一种。方法本身可以检查null,仅在安全时调用toString。这样对方法的调用者就没有额外的要求了。”

皆梦说:“体谅无臂乞丐只能接受放在他舌上的食物,你好心地随身随处带着米饭。可是你把你的饭投入任何人的口中,这样老鼠啊喜鹊啊可都高兴了!”

第三个弟子站了起来,“三个僧人、三个弟子。为什么我们不干脆来三个方法,每个接受一个不同的类型:EmployeeID,Long,String?第一个和第二个可以委派给第三个,每个都可以检查null。”

皆梦说:“这样你们村的老鼠是吃不到剩饭了,可是乞丐们会吃得多胖啊!但是,如果一个方法需要接受四个参数,你是不是要写八十一个(3X3X3X3)不同的方法呢?你可能浪费太多时间去取悦所有人,结果搞得大家都不高兴。”

皆梦然后请老僧们退下,令弟子们自己决定能满足所有考虑的最佳方案。

- - -

在他们离开时,第一个老僧悄悄问道:“你们想他们会选择什么方法呢?”

第二个老僧答道:“如果他们像我们一样,就是谁的声音喊得最响的那个选择了。”

第三个老僧点点头。“毫无疑问,有人总能从解答中找出毛病,可是我们还是会勉强地接受,地球还是会继续转下去。然而结果就是:我们都是彼此脚下的乞丐。”