Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scala StringBuilder

Is there an implicit method to convert scala.collection.mutable.StringBuilder to java.lang.StringBuilder?

I am using a Java library (JCommander) in which one of the methods (usage) takes a java.jang.StringBuilder argument.

like image 491
Ralph Avatar asked Jun 01 '11 13:06

Ralph


3 Answers

You can't start with a Scala StringBuilder and then obtain the Java version. You can, however, wrap a java.lang.StringBuilder in the Scala version. So:

val jsb = new java.lang.StringBuilder();
val sb = new StringBuilder(jsb);
// Do Scala-y stuff with sb
JCommander.whatever.usage(jsb);
// Do more Scala-y stuff

Since--not a guarantee, but true in practice right now (2.8, 2.9)--the Scala wrapper doesn't store any state (instead just referring to the Java version), you're safe to mix and match usage of the two.

like image 114
Rex Kerr Avatar answered Dec 02 '22 23:12

Rex Kerr


Looking at the source code, it seems there's absolutely no way to get a java.lang.StringBuilder from a scala.collection.mutable.StringBuilder.

You can create a new java.lang.StringBuilder with Scala's, going through a conversion of some type (String or CharSequence).

like image 40
Daniel C. Sobral Avatar answered Dec 02 '22 23:12

Daniel C. Sobral


Use this implicit transform do do this:

    implicit def b2b(b: scala.collection.mutable.StringBuilder) = 
        new java.lang.StringBuilder(b)
like image 22
Aleksei Avatar answered Dec 02 '22 21:12

Aleksei