java.util. Перечисление в Scala

Как мне правильно позвонить exists за java.util.Enumeration? Я не могу изменить источник, это из HttpServletRequest,

Этот (не связанный) код работает:

val a = List("One", "Two", "Three")
a exists (_ contains "T")

Но почему этот код не может быть скомпилирован:

import collection.JavaConversions.enumerationAsScalaIterator
enumerationAsScalaIterator(req.getHeaderNames[String])[String] exists (_ contains "T")

Я использую IntelliJ в качестве моей IDE. Приведенный выше код не показывает ошибки в редакторе, но выдает ошибку при компиляции:

ошибка: ';' ожидается, но '[' найдено. enumerationAsScalaIterator (req.getHeaderNames [String]) [String] существует (_ содержит "T")

4 ответа

Решение

Похоже, единственный способ сделать это для HttpServletRequest.getHeaderNames старый добрый цикл:

val headers = req.getHeaderNames
while (headers.hasMoreElements) {
if (headers.nextElement.asInstanceOf[String] contains "T")
  return FOO
}

Пытаться

import collection.JavaConversions.enumerationAsScalaIterator

req.getHeaderNames() exists (_ contains "T")

Ваш второй [String] здесь: req.getHeaderNames[String])[String] Не требуется и не является действительным Scala. Пытаться

enumerationAsScalaIterator(req.getHeaderNames[String]) exists (_ contains "T")

А еще лучше, enumerationAsScalaIterator доступен неявно, поэтому вы должны просто сделать:

req.getHeaderNames exists (_ contains "T")

Так должно быть enumerationAsScalaIterator[String](req.getHeaderNames[String]) exists (_ contains "T") (или использовать его неявно, как предполагает Пабло Фернандес). Однако не знаю, почему в редакторе не будет ошибки.

Другие вопросы по тегам