Проблема с типом Scala (вывод)?

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

Я пытаюсь создать 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 of ContentDispositionBuilder возвращает экземпляр T, так что это действительно должно работать.

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

Обновление:

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

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

person Sven Jacobs    schedule 31.08.2011    source источник
comment
Это только у меня или кажется, что ни одна из ваших ссылок не работает?   -  person agilesteel    schedule 31.08.2011
comment
Похоже, java.net сейчас не работает :-(   -  person Sven Jacobs    schedule 31.08.2011
comment
Ошибка как-то связана с взаимодействием между подстановочными знаками Java и экзистенциалами Scala. Несмотря на то, что эти две системы типов похожи, они не совпадают. Это выстрел в темноте, но, возможно, стоит попробовать с только что выпущенной Scala 2.9.1.   -  person Kipton Barros    schedule 31.08.2011
comment
У меня было несколько проблем с взаимодействием с 2.9.0.1 при использовании Hadoop (TextInputFormat не работает там, где ожидается InputFormat). С 2.9.1 дела пошли лучше. Хотелось бы надеяться, что вы получите более информативное исключение!   -  person schmmd    schedule 07.09.2011
comment
2.9.1 не устранил для меня эту проблему :( Я все еще должен использовать явные приведения.   -  person Sven Jacobs    schedule 12.09.2011
comment
Это косвенно, но вы можете попробовать скальатру в качестве альтернативы Джерси.   -  person schmmd    schedule 15.09.2011


Ответы (1)


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

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()
person Chochos    schedule 27.09.2011