我一直想知道透明 implicit
转换是否真的是一个好主意,以及更多地,嗯,显式地使用隐式是否真的更好。例如,假设我有一个接受 aDate
作为参数的方法,并且我有一个将 a 转换String
为 a的隐式转换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
而且这种用法仍然允许我们利用implicit
s。