Вопрос типа Скалы (логический вывод)? - PullRequest
7 голосов
/ 31 августа 2011

Я разрабатываю веб-сервис REST в Scala, используя эталонную реализацию Джерси JAX-RS, и получаю странную ошибку.

Я пытаюсь создать ContentDisposition объект с использованием ContentDisposition.ContentDispositionBuilder .

ContentDisposition.ContentDispositionBuilder имеет два типа T extends ContentDisposition.ContentDispositionBuilder и V extends ContentDisposition.Метод type из ContentDisposition возвращает экземпляр компоновщика.

Код

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).build()

работает, однако

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy").build()

выдает ошибку компилятора

error: value build is not a member of ?0
val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy").build()
                                                                                                         ^

(Обратите внимание, что type необходимо заключать в "кавычки", потому что это ключевое слово в Scala)

fileName из ContentDispositionBuilder возвращает экземпляр T, поэтому это должнона самом деле работает.

Я не понимаю.Любая идея?Кстати, я использую Scala 2.9.0.1.

Обновление:

Это работает.Но зачем мне здесь кастинг?

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM)
  .fileName("dummy")
  .asInstanceOf[ContentDisposition.ContentDispositionBuilder[_,_]]
  .build()

1 Ответ

2 голосов
/ 27 сентября 2011

Я полагаю, что вывод типа может зайти так далеко ... Вы, вероятно, можете сделать это в две строки, без необходимости делать приведения; ты пробовал это?

val something=ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM)
val contentDisposition=something.fileName("dummy").build()

или, может быть,

val builder=ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy")
val contentDisposition=builder.build()
...