scala types jersey inference

¿Problema de Scala(inferencia)?



scala annotations (1)

Estoy desarrollando un servicio web REST en Scala utilizando la implementación de referencia JAX-RS de Jersey y estoy obteniendo un extraño error.

Estoy intentando crear un objeto ContentDisposition usando ContentDisposition.ContentDispositionBuilder .

ContentDisposition.ContentDispositionBuilder tiene dos tipos T extends ContentDisposition.ContentDispositionBuilder y V extends ContentDisposition . El type de método de ContentDisposition devuelve una instancia de generador.

El código

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

sin embargo funciona

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

produce el error del compilador

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

(Tenga en cuenta que el type debe colocarse entre comillas porque es una palabra clave en Scala)

fileName of ContentDispositionBuilder devuelve una instancia de T por lo que esto debería funcionar.

No entiendo esto. ¿Alguna idea? Estoy usando Scala 2.9.0.1 por cierto.

Actualizar:

Esto funciona. Pero, ¿por qué necesito el casting aquí?

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


Supongo que la inferencia de tipo solo puede ir tan lejos ... Probablemente puedas hacerlo en dos líneas, sin tener que hacer ningún molde; ¿Has probado esto?

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

o tal vez

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