2010-10-21 14 views
26

Potrzebuję wydrukować sformatowany ciąg zawierający scala.Long. java.lang.String.format() jest niezgodny z scala.Long (kompilacji) i RichLong (java.util.IllegalFormatConversionException)Jak sformatować ciągi znaków w Scali?

kompilator ostrzega Wycofanie Integer w następnym kodem roboczych:

val number:Long = 3243 
String.format("%d", new java.lang.Long(number)) 

Czy mogę zmienić użytkownika, typ danych lub coś innego?

+0

Czy to literówka, którą konwertujesz z długiej na Integer? –

Odpowiedz

40

Można spróbować czegoś takiego:

val number: Long = 3243 
"%d".format(number) 
+9

Istnieje również wartość wyjaśniająca ** dlaczego ** tak powinno być. –

+0

'.format' w tym przypadku będzie metodą' StringLike', która jest niejawnie utworzona z literału łańcuchowego. – expert

20

Sposób Format w Scala istnieje bezpośrednio na przypadkach String, więc nie musisz/chcesz statycznej metody klasy. Nie musisz także ręcznie prymitywować prymitywu long, niech kompilator zaopiekuje się tym wszystkim za Ciebie!

String.format("%d", new java.lang.Integer(number)) 

dlatego jest lepiej napisany jako

"%d".format(number) 
7

@ odpowiedź Bruna jest to, co trzeba zastosować w większości przypadków.

Jeśli trzeba użyć metody Java, aby wykonać formatowanie, użyj

String.format("%d",number.asInstanceOf[AnyRef]) 

które Box Long ładnie Java.

+0

To działa. Czy wiesz, dlaczego nie spowoduje to błędu runtime, podobnie jak w moim podejście RichLong? – Basilevs

+2

'RichLong' jest, na Javie, tylko kilka losowych klas. Java spodziewa się zobaczyć pudełkową liczbę całkowitą odpowiadającą "% d" '. Oczywiście Java rzuca dopasowanie, gdy dostaje "RichLong". 'AsInstanceOf [AnyRef]' preferencyjnie umieszcza się w klasie 'java.lang', a nie w klasie' Rich'. –

Powiązane problemy