(только начал с Scala несколько недель назад, так что медведь со мной)получение java.io.Serializable из опции [..] в Scala
Чтение/попробовать эту маленькую статью здесь, столкнулись с некоторыми неожиданностями
http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html
После определения класса пользователя случай, как описано:
case class User(
id: Int,
firstName: String,
lastName: String,
age: Int,
gender: Option[String])
object UserRepository {
private val users = Map(1 -> User(1, "John", "Doe", 32, Some("male")),
2 -> User(2, "Johanna", "Doe", 30, None))
def findById(id: Int): Option[User] = users.get(id)
def findAll = users.values
}
, вот получает я наблюдаю:
> scala> UserRepository.findById(1)
> res34: Option[User] = Some(User(1,John,Doe,32,Some(male)))
>
> scala> UserRepository.findById(1).get
> res35: User = User(1,John,Doe,32,Some(male))
>
> scala> UserRepository.findById(1).getOrElse("N/A")
> res36: java.io.Serializable = User(1,John,Doe,32,Some(male))
>
> scala> UserRepository.findById(3).getOrElse("N/A")
> res37: java.io.Serializable = N/A
Первые два - это то, что я ожидал, но второй второй нет; как для существующих, так и для несуществующих пользователей. Почему java.io.Serializable, внезапно?
вот, это _exactly_ то, что я думал после того, как задал вопрос. Я ожидал, что это будет «Any», хотя, как и в вашем примере «Some (1) .getOrElse (« Привет »), но я полагаю, что он возвращается к иерархии классов Java, а? – alexakarpov
@alexakarpov, потому что ближайший общий тип супер для пользователя и строки является Serializable – pamu