问题
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