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.
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.
Use this implicit transform do do this:
implicit def b2b(b: scala.collection.mutable.StringBuilder) =
new java.lang.StringBuilder(b)
java.lang.StringBuilder expects to modify it and allow the caller access to those changes. The implicit method you show creates a "defensive" copy of the scala.collection.mutable.StringBuilder. Any changes in the called method will not be reflected in the scala.collection.mutable.StringBuilder. Now that I think about it, the only way it could be implemented is if scala.collection.mutable.StringBuilder extended or wrapped java.lang.StringBuilder.