2011-08-31 12 views
7

Zajmuję się tworzeniem usługi sieciowej REST w Scali przy użyciu implementacji referencyjnej JAX-RS Jersey i otrzymuję dziwny błąd.Problem dotyczący typu Scala (wnioskowania)?

Próbuję utworzyć obiekt ContentDisposition przy użyciu ContentDisposition.ContentDispositionBuilder.

ContentDisposition.ContentDispositionBuilder ma dwa typy T extends ContentDisposition.ContentDispositionBuilder i V extends ContentDisposition. Metoda type z zwraca wartość instancji konstruktora.

Kodeksu

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

prace jednak

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

produkuje błąd kompilatora

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

(Zauważ, że type należy umieścić w "cudzysłowie", bo to słowo kluczowe w Scala)

fileName z ContentDispositionBuilder zwraca instancję z T, więc powinno to faktycznie zadziałać.

Nie rozumiem tego. Dowolny pomysł? Używam Scala 2.9.0.1 przy okazji.

Aktualizacja:

To działa. Ale dlaczego tu potrzebuję castingu?

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

Czy to tylko ja czy żaden z linków wydają się działać? – agilesteel

+0

Wygląda na to, że java.net nie działa w tej chwili :-( –

+1

Błąd ma coś wspólnego ze współdziałaniem między symbolami Java a egzystencjalnymi Scala, choć podobne, te dwa typy funkcji systemu nie są takie same. To jest strzał w ciemności , ale warto spróbować z właśnie wydaną wersją Scala 2.9.1. –

Odpowiedz

2

Zgaduję, że wnioskowanie typu może zajść tak daleko ... Prawdopodobnie można to zrobić w dwóch liniach, bez konieczności wykonywania jakichkolwiek rzutów; czy próbowałeś tego?

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

czy może

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