получая ошибку невыполненных методов, хотя я их реализовал - PullRequest
0 голосов
/ 24 апреля 2018

Я получаю следующую ошибку в моем Play, Silhouette, Cassandra приложении

class UsersRepository needs to be abstract, since: it has 6 unimplemented members. /** As seen from class UsersRepository, the missing signatures are as follows. * For convenience, these are usable as stub implementations. */ // Members declared in com.mohiva.play.silhouette.api.repositories.AuthInfoRepository def add[T <: com.mohiva.play.silhouette.api.AuthInfo](loginInfo: com.mohiva.play.silhouette.api.LoginInfo,authInfo: T): scala.concurrent.Future[T] = ???

def find[T <: com.mohiva.play.silhouette.api.AuthInfo](loginInfo: com.mohiva.play.silhouette.api.LoginInfo)(implicit tag: scala.reflect.ClassTag[T]): scala.concurrent.Future[Option[T]] = ???

def remove[T <: com.mohiva.play.silhouette.api.AuthInfo](loginInfo: com.mohiva.play.silhouette.api.LoginInfo)(implicit tag: scala.reflect.ClassTag[T]): scala.concurrent.Future[Unit] = ???

def save[T <: com.mohiva.play.silhouette.api.AuthInfo](loginInfo: com.mohiva.play.silhouette.api.LoginInfo,authInfo: T): scala.concurrent.Future[T] = ???

def update[T <: com.mohiva.play.silhouette.api.AuthInfo](loginInfo: com.mohiva.play.silhouette.api.LoginInfo,authInfo: T): scala.concurrent.Future[T] = ???

Однако в том же файле я их реализовал

class UsersRepository(session: Session) 
  extends CassandraRepository[UserKeys,User](session, "users", List("bucket","email")) with UserDao with AuthInfoRepository {

        def find(loginInfo:LoginInfo):Future[Option[PasswordInfo]] = Future {
    ...      }

          def add(loginInfo:LoginInfo, authInfo:PasswordInfo):Future[PasswordInfo] = Future {
       ...
          }

          def update(loginInfo:LoginInfo, authInfo:PasswordInfo):Future[PasswordInfo] = {
add(..)//add returns a Future
    ...}

          def save(loginInfo:LoginInfo, authInfo:PasswordInfo):Future[PasswordInfo] =  {
            add(..)//add returns a Future
}

          def remove(loginInfo:LoginInfo):Future[Unit] = Future{
    ...
          }
}

Что я делаю не так?

1 Ответ

0 голосов
/ 24 апреля 2018

Ну, вы на самом деле не переопределяете их:

def add[T <: AuthInfo](
  loginInfo: LoginInfo,
  authInfo: T
): Future[T]

против

def add(
  loginInfo:LoginInfo,
  authInfo: PasswordInfo
):Future[PasswordInfo]

Первый принимает все , которое может быть экземпляром AuthInfo последний является очень специфическим случаем, когда он точно равен PasswordInfo.

Когда вы смешиваете в него ООП, например, передаете его на родительский интерфейс, специализация может быть на самом деле не видимой, и компилятору придется использовать универсальный(не реализовано).

В таких случаях безопаснее добавить ключевое слово override и быть уверенным, что вы на самом деле переопределяете реализацию ???.

...