2016-03-07 6 views
1

Ниже приведены классы моего дела. Как инициализировать дочерний класс класса case в scala?scala case class initialisation

// case class 
case class parent(id: String, name: String, rNo: Int, 
        child: Option[Child]) 

case class Child(cid: String, Ctype: String, 
       group_category_id: String, 
       unlock_at: String, due_at: String) 

val a: Child = if (x.child != None) { x.child.get } else { null } 

Если я заявляю, как нулевой, то он будет бросать NullPointerException в случае еще условия. Как это решить?

ответ

2

Я не думаю, что вы должны развернуть Option[Child] так, чтобы оно было null, если оно было пустым. Вы не должны использовать нули при написании идиоматической Scala. Я бы сохранил его в Option и использовал методы map и flatMap, чтобы получить доступ к дочернему, если он существует.

Однако, если вы действительно хотите, вы можете сделать это следующим образом:

val a: Child = x.child.getOrElse(null) 
+0

Когда я отображения классов регистра в JSON ответ, значение Ребенок не всегда присутствует, когда-то, где-то нет. Также мне нужно получить поля, присутствующие в классе Child, в этом случае он будет генерировать исключение нулевого указателя, правильно? Мне нужно получить доступ к ** a.grading_type ** –

+2

Нет У вас нет. Вот почему класс Option является формой. У вас может быть ценность или нет. Нуль не приветствуется в функциональном программировании. Параметры дают вам информацию о том, что в некоторых случаях значение может отсутствовать. –

+0

Сделайте это: 'val gradingType: Option [String] = x.child.map (_. Grading_type)' – marstran