У меня есть следующая иерархия scala:
sealed trait SessionResult[+T] {
def toOption: Option[T]
}
object SessionResult {
trait SessionValue[T] extends SessionResult[T] {
def session: T
def toOption: Option[T] = Some(session)
}
trait NoSessionValue[T] extends SessionResult[T] {
def toOption: Option[T] = None
}
case class Decoded[T](session: T) extends SessionResult[T] with SessionValue[T]
case class CreatedFromToken[T](session: T) extends SessionResult[T] with SessionValue[T]
case object NoSession extends SessionResult[Nothing] with NoSessionValue[Nothing]
case object TokenNotFound extends SessionResult[Nothing] with NoSessionValue[Nothing]
case object Expired extends SessionResult[Nothing] with NoSessionValue[Nothing]
case class Corrupt(e: Exception) extends SessionResult[Nothing] with NoSessionValue[Nothing]
}
Но я использую этот код из java, и следующий фрагмент кода не компилируется:
SessionResult<SomeSession> sr = ...
System.out.println(sr instanceof NoSession)
Почему? А также как я могу использовать instanceof
для проверки класса объекта scala?
Ошибка, которую я получаю:
Inconvertible types; cannot cast SessionResult<SomeSession> to NoSession.
sr instanceof SessionResult<SomeSession>
- person XtremeBaumer   schedule 20.07.2017sr.get(0) instanceof NoSession
илиsr instaceof SessionResult<NoSession>
- person XtremeBaumer   schedule 20.07.2017SessionResult<SomeSession>
экземпляромNoSession
, чего никогда не может быть, поэтому компилятор отклоняет его. - person Dima   schedule 20.07.2017NoSession
иSomeSession
расширяют один и тот же суперкласс, аSessionResult
- нет. поэтому вы можете только проверить, относится ли каждый элементSessionResult
(если это список) к типуNoSession
. для получения дополнительной помощи, пожалуйста, сообщите нам, что именно представляют собой эти классы и какие суперклассы они расширяют, если они делают - person XtremeBaumer   schedule 20.07.2017