blob: ad4739246790e4e7cc87597e7e1a2af1fef9e526 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/* *\
** ________ ___ __ ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2002-2007, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ |_| **
** **
\* */
// $Id$
package scala.runtime
import Predef._
object StringAdd {
// Needed for the format hack. Can be removed once we drop 1.4
lazy val formatMethod: java.lang.reflect.Method = {
val paramTypes = Array[Class[T] forSome { type T }](classOf[String], classOf[Array[Object]])
classOf[String].getDeclaredMethod("format", paramTypes)
}
}
final class StringAdd(self: Any) {
def +(other: Any) = String.valueOf(self) + other
/** Returns string formatted according to given <code>format</code> string.
* Format strings are as for <code>String.format</code>
* (@see java.lang.String.format).
* Only works on Java 1.5 or higher!
*/
def formatted(format: String): String = {
// This should be:
// String.format(format, Array(self.asInstanceOf[Object]))
// However, the line above does not compile on Java 1.4 because String.format exists only in 1.5
// Therefore, we do the following hack:
val args = Array(self.asInstanceOf[Object])
StringAdd.formatMethod.invoke(null, Array[Object](format, args)).asInstanceOf[String]
}
}
|