Сегодня столкнулся с действительно странной проблемой при попытке добавить неявный метод в Both.
implicit class EitherProvidesRollback[String,B](e: Either[String,B]) {
def rollback(
ss: Option[Session], overrideMsg: Option[String]): Either[String,B] = {
e.fold(
msg=> {
ss.map(_.rollback)
// found String required java.lang.String, FTW
// Left(i18n(overrideMsg.getOrElse(msg)))
// behold, the horrible hack
Left(i18n(overrideMsg.getOrElse(msg).toString).asInstanceOf[String])
},
Right(_)
)
}
}
метод i18n принимает строку, которая, AFAICT, является именно тем, что он получает. Обходной путь, как в этом потоке, состоит в том, чтобы T <: String
в неявном подпись типа класса. Похоже, Predef может играть здесь роль.
Есть ли способ заставить это работать без ужасного приведения во время выполнения, в то же время сохраняя сигнатуру типа как именно String?
Спасибо