0

我的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{
    ...
          }
}

我究竟做错了什么?

4

1 回答 1

0

好吧,您实际上并没有覆盖它们:

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

对比

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

前者接受任何可以作为实例的东西AuthInfo,后者是一个非常具体的情况PasswordInfo

当您将 OOP 混合到其中时,例如向上转换到父接口时,专业化可能实际上并不明显,编译器将不得不使用通用(未实现)方法。

在这种情况下,添加override关键字并确保您实际上覆盖了???实现会更安全。

于 2018-04-24T16:21:29.697 回答