问题
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.
回答1:
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.
回答2:
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).
回答3:
Use this implicit transform do do this:
implicit def b2b(b: scala.collection.mutable.StringBuilder) =
new java.lang.StringBuilder(b)
来源:https://stackoverflow.com/questions/6201546/scala-stringbuilder