我想从scala调用以下java方法:
protected final FilterKeyBindingBuilder filter(String urlPattern, String... morePatterns) {
return filtersModuleBuilder.filter(Lists.newArrayList(urlPattern, morePatterns));
}
Run Code Online (Sandbox Code Playgroud)
我的scala来电看起来像这样
def test(url: String, urls: String*) {
filter(url, urls: _*).through(classOf[MyTestWhateverFilter])
}
Run Code Online (Sandbox Code Playgroud)
但是,编译时执行代码会产生异常:
java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
def test(url: String, urls: String*) {
filter(url, urls.map(_.asInstanceOf[java.lang.String]) :_*).through(classOf[MyTestWhateverFilter])
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,例外是:
java.lang.ClassCastException: scala.collection.mutable.ArrayBuffer cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
我认为在2.8中,Array [String]作为String []数组传递给java,并且不需要额外的拆箱.
有任何想法吗?
提前致谢!
编辑:
如何复制它:
import com.google.inject.servlet.ServletModule
trait ScalaServletModule extends ServletModule{
def test(s: String,strs: String*) = {
println(strs.getClass)
println(super.filter(s,strs:_*))
}
}
object Test {
def main(args: Array[String]) …Run Code Online (Sandbox Code Playgroud) scala ×1