2016-07-19 3 views
0

У меня есть этот объект:Получить вариант по стоимости объекта

case class Student(name: String, dateTime: DateTime) 

Внутри этой функции я получаю Student object но DateTime иногда null, а иногда нет:

def foo(student: Student): Unit = { 

} 

Это новая функция, которая получает Option[DateTime]

def foo2(option: Option[DateTime]): Unit = { 

} 

Итак, когда звоните foo2, мне нужно сначала проверить, если мой DateTime равен null, а затем позвоните по телефону foo2(None) или DateTime не null и позвоните по телефону Some(student).

Так что мой вопрос: вместо того, чтобы при использовании этого:

def foo(student: Student): Unit = { 

    if (student == null) foo2(None) 
    else foo2(Some(student)) 
} 

Любая идея, как определить значение student и отправить его в foo2 функции без использования if-else?

ответ

4

Измените класс конструкцию, чтобы отразить характер нуль:

case class Student(name: String, dateTime: Option[DateTime]) 

object Student{ 
    def apply(name: String, dateTime: DateTime) = new Student(name, Option(dateTime)) 
} 

apply по умолчанию из Option будет обрабатывать преобразования null в None.

0

То, что вы написали в foo, может быть сокращено до foo2(Option(student)). Но это, возможно, не то, что вы действительно хотите, потому что ваш foo2 принимает по выбору DateTime, а не Student.

Итак, я угадал, что вы пытаетесь сделать, это:

foo2(Option(student).flatMap(s => Option(s.dateTime)) 

еще лучше, как подсказывает ответ, сделать dateTime факультативной Student, чтобы начать с.

Смежные вопросы