Мне было интересно, действительно ли прозрачные 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
кого-нибудь?) это использование все еще позволяет нам воспользоваться преимуществом implicit
с.