У меня есть итерация массивов, которые я пытаюсь превратить в классы дел, и я сопоставляю их для этого. Если массив не может быть преобразован в класс case, я хочу записать предупреждение и продолжить сопоставление. Однако, когда я реализую предупреждение, тип возвращаемого значения меняется с Iterable[MyCaseClass]
на Iterable[Any]
, что не то, что я хочу. Например:
case class MyCaseClass(s1: String, s2: String)
object MyCaseClass {
def apply(sa: Array[String]) = new MyCaseClass(sa(0), sa(1))
}
val arrayIterable: Iterable[Array[String]] = Iterable(Array("a", "b"), Array("a", "b", "c"))
def badReturnType(): Iterable[Any] = { // Iterable[Any] is undesireable
arrayIterable map {
case sa: Array[String] if sa.length == 2 => MyCaseClass(sa)
case _ => println("something bad happened!") // but warnings are good
}
}
def desiredReturnType(): Iterable[MyCaseClass] = { // Iterable[MyCaseClass] is desireable
arrayIterable map {
case sa: Array[String] if sa.length == 2 => MyCaseClass(sa)
// but no warnings if things go wrong!
}
}
Я хочу написать функцию, которая удовлетворяет следующим критериям:
- сопоставляет через Iterable, преобразовывая каждый элемент в
MyCaseClass
- регистрировать предупреждения, когда я получаю массив, который не может быть преобразован в
MyCaseClass
- после регистрации предупреждения, массив, переданный в критерии соответствия, игнорируется / отбрасывается
- тип возвращаемого значения должен быть
Iterable[MyCaseClass]
.
Как мне выполнить эти условия?