小编pok*_*oko的帖子

如何使用Scala 2.8将String*scala vararg传递给java方法

我想从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

5
推荐指数
1
解决办法
6732
查看次数

标签 统计

scala ×1