Я реализую Java-интерфейс с множеством методов с параметрами Object, которые в моем случае действительно являются строками, содержащими имена пользователей:
public interface TwoFactorAuthProvider {
boolean requiresTwoFactorAuth(Object principal);
... //many more methods with the same kind of parameter
}
Я пытаюсь использовать неявное преобразование для преобразования этихк User
объектам в моей реализации:
class TwoFactorAuthProviderImpl(userRepository: UserRepository)
extends TwoFactorAuthProvider {
def requiresTwoFactorAuth(user: User): Boolean = {
...
}
}
Когда я определяю преобразование в сопутствующем объекте моего класса, оно просто отлично подбирается, и мой класс компилируется:
object TwoFactorAuthProviderImpl {
implicit def toUser(principal: Any): User = {
null //TODO: do something useful
}
}
Однако, чтобы выполнить преобразование, мне нужен доступ к хранилищу пользователя, которое есть у экземпляра TwoFactorAuthProviderImpl
, а для объекта-компаньона - нет.Я подумал, что мог бы использовать неявный параметр для его передачи:
implicit def toUser(principal: Any)(implicit repo: UserRepository): User = {
val email = principal.asInstanceOf[String]
repo.findByEmail(email)
}
Но с неявным параметром преобразование больше не воспринимается компилятором (жалуясь, что я не реализую интерфейс).
Есть ли способ получить неявное преобразование, которое я хочу, или это выходит за рамки того, что вы можете сделать с имплицитами?