(gerade vor ein paar Wochen mit Scala begonnen, so mit mir tragen)eine java.io.Serializable von Option bekommen [..] in Scala
Lesen/heraus hier, um diesen kleinen Artikel versucht, in einigen Überraschungen lief
http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html
einen Fall Klasse Benutzer wie beschrieben Nach der Definition:
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
}
, hier sind die bekommt ich beobachte:
012.351.> 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
Die ersten beiden sind, was ich erwartet habe, aber die zweiten beiden sind nicht; sowohl bei bestehenden als auch bei nicht vorhandenen Benutzern. Warum java.io.Serializable, plötzlich?
siehe, das ist _exactly_, was ich von nachdem ich die Frage gestellt habe. Ich habe jedoch erwartet, dass es "Any" ist, genau wie in Ihrem Beispiel von "Some (1) .getOrElse (" Hello "), aber ich nehme an, dass es auf die Java-Klassenhierarchie zurückgreift, wie? – alexakarpov
@alexakarpov, weil der nächste gemeinsame Super-Typ für User und String serialisierbar ist – pamu