Неявные преобразования могут работать, только если у преобразованного типа еще нет метода с данной сигнатурой. Поскольку у всего есть toString
, это невозможно переопределить с помощью pimping.
Что вы можете сделать, это использовать класс типов (сродни scalaz.Show
), который выглядит следующим образом:
trait Show[-A] {
def show(a : A): String
}
Тогда вы можете использовать show
везде вместо toString
. В идеале вы должны сделать экземпляр Show[Any]
неявным с очень низким приоритетом.
implicit val DateShow = new Show[Date] { def show(d : Date) = "whatever" }
trait LowPriorityShows {
implicit val AnyShow = new Show[Any] { def show(a : Any) = a.toString }
}
P.S. Причина, по которой я бы не предложил использовать scalaz.Show
, заключается в том, что тип возвращаемого значения List[Char]
, что просто невозможно для большинства случаев использования