【发布时间】:2010-11-27 03:42:22
【问题描述】:
我一直在想 transparent implicit 转换是否真的是一个好主意,以及是否实际上更多地使用隐式会更好,嗯,显式。例如,假设我有一个接受Date 作为参数的方法,并且我有一个隐式转换,它将String 转换为Date:
implicit def str2date(s: String) : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
private def foo(d: Date)
那么显然我可以通过透明的implicit 转换来调用它:
foo("20090910")
将字符串转换为日期这一事实是否更明确?
class DateString(val s: String) {
def toDate : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
}
implicit def str2datestr(s: String) : DateString = new DateString(s)
那么用法看起来更像:
foo("20090910".toDate)
这样做的好处是以后可以更清楚地了解正在发生的事情 - 我现在已经被透明的 implicit 转换所吸引了几次,我应该知道(Option 到 Iterable 任何人?)和这种用法仍然允许我们利用implicits 的强大功能。
【问题讨论】: