2010-10-21 31 views
26

我需要打印包含scala.Long的格式化字符串。 java.lang.String.format()是與scala.Long(編譯時間)和RichLong(java.util.IllegalFormatConversionException)不相容如何在Scala中格式化字符串?

編譯器發出警告整數的棄用以下工作的代碼:

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

我應該改變fomatter,數據類型還是其他?

+0

這是一個你從長轉換爲整數的錯字? – 2010-10-21 15:56:09

回答

40

你可以嘗試這樣的:直接在實例字符串

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

解釋**爲什麼**應該是這種情況。 – 2010-10-21 18:35:53

+0

'.format'在這種情況下將是'StringLike'的方法,它是從字符串文字隱式創建的。 – expert 2013-07-19 01:50:25

20

斯卡拉格式方法存在,所以你並不需要/想靜態類方法。你也不需要手動填充原始代碼,讓編譯器照顧你所有的東西!因此

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

更好寫成

"%d".format(number) 
7

@布魯諾的答案是,你應該在大多數情況下使用什麼。

如果你必須使用Java方法做的格式,使用

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

將框中Long很好地爲Java。

+0

這工作。你知道爲什麼這不會像我的RichLong方法一樣導致運行時錯誤嗎? – Basilevs 2010-10-21 16:42:25

+2

'RichLong'對於Java而言只是一些隨機類。 Java期望看到一個與'「%d」'對應的盒裝原始整數。所以當Java獲得RichLong的時候,它當然會適合它。 'asInstanceOf [AnyRef]'優先放入'java.lang'類中,而不是'Rich'類。 – 2010-10-21 18:09:05