¿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()