Scala StringBuilder

Scala StringBuilder,scala,stringbuilder,implicit-conversion,Scala,Stringbuilder,Implicit Conversion,是否有隐式方法将scala.collection.mutable.StringBuilder转换为java.lang.StringBuilder 我正在使用一个Java库(JCommander),其中一个方法(用法)使用一个Java.jang.StringBuilder参数。使用此隐式转换执行以下操作: implicit def b2b(b: scala.collection.mutable.StringBuilder) = new java.lang.StringBu

是否有隐式方法将scala.collection.mutable.StringBuilder转换为java.lang.StringBuilder


我正在使用一个Java库(JCommander),其中一个方法(
用法
)使用一个
Java.jang.StringBuilder
参数。

使用此隐式转换执行以下操作:

    implicit def b2b(b: scala.collection.mutable.StringBuilder) = 
        new java.lang.StringBuilder(b)

查看源代码,似乎绝对无法从
scala.collection.mutable.StringBuilder
中获取
java.lang.StringBuilder

您可以使用Scala创建一个新的
java.lang.StringBuilder
,进行某种类型的转换(
String
CharSequence
)。

您不能从Scala
StringBuilder
开始,然后获得java版本。但是,您可以在Scala版本中包装
java.lang.StringBuilder
。因此:

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

因为——这不是一个保证,但在目前的实践中是正确的(2.8,2.9)——Scala包装器不存储任何状态(而只是引用Java版本),所以您可以安全地混合和匹配这两种用法。

事实上,我认为这行不通。我假设任何需要
Java.lang.StringBuilder
的Java方法都需要修改它,并允许调用方访问这些更改。您显示的
implicit
方法创建
scala.collection.mutable.StringBuilder的“防御”副本。调用方法中的任何更改都不会反映在
scala.collection.mutable.StringBuilder
中。现在我考虑一下,实现它的唯一方法是if
scala.collection.mutable.StringBuilder
扩展或包装
java.lang.StringBuilder