2010-10-21 15 views
26

Ho bisogno di stampare una stringa formattata contenente scala.Long. java.lang.String.format() è incompatibile con scala.Long (tempo di compilazione) e RichLong (java.util.IllegalFormatConversionException)Come formattare le stringhe in Scala?

compilatore mette in guardia sulla deprecazione della Integer sul seguente codice di lavoro:

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

Devo cambiare fomatter, tipo di dati o qualcos'altro?

+0

È un errore di battitura che stai convertendo da lungo a intero? –

risposta

40

Si può provare qualcosa di simile:

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

C'è anche un valore nella spiegazione ** perché ** dovrebbe essere così. –

+0

'.format' in questo caso sarà il metodo di' StringLike' che viene creato implicitamente da string letterale. – expert

20

Il metodo format a Scala esiste direttamente sul casi di stringa, quindi non è necessario/desidera che il metodo di classe statica. Inoltre, non è necessario chiudere manualmente la primitiva long, lasciare che il compilatore si occupi di tutto ciò che fa per te!

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

è quindi meglio scritto come

"%d".format(number) 
7

@ risposta di Bruno è quello che si dovrebbe usare in molti casi.

Se è necessario utilizzare un metodo Java per fare la formattazione, utilizzare

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

che la casella Long bene per Java.

+0

Questo funziona. Sai perché questo non causerà un errore di runtime come con il mio approccio RichLong? – Basilevs

+2

'RichLong' è, per Java, solo una classe casuale. Java si aspetta di vedere un intero primitivo in scatola corrispondente a ""% d "'. Quindi, ovviamente, Java reagisce quando riceve un 'RichLong'. Il 'asInstanceOf [AnyRef]' preferenzialmente caselle nella classe 'java.lang', non nella classe' Rich'. –

Problemi correlati