使用Scala中的重载vargs方法覆盖Java接口

Edu*_*rdo 9 java scala

有没有办法在Scala中实现以下Java接口?

public interface Request {
    void acceptLanguage(Locale... locales);
    void acceptLanguage(String... locales);
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

override def acceptLanguage(locales: Locale*) : Unit =
override def acceptLanguage(locales: String*) : Unit =
Run Code Online (Sandbox Code Playgroud)

但这给了我:

error: double definition:
have same type after erasure
Run Code Online (Sandbox Code Playgroud)

我试过这个:

override def acceptLanguage(locales: Locale*) (implicit Manifest[Locale]) : Unit = {}
override def acceptLanguage(locales: String*) (implicit Manifest[String]): Unit = {}
Run Code Online (Sandbox Code Playgroud)

但是这给出了不同的签名,因此覆盖失败

我使用的是版本2.9.2.

ghi*_*hik 8

使用@varargs注释:

override def acceptLanguage(@varargs locales: Locale*) : Unit =
override def acceptLanguage(@varargs locales: String*) : Unit =
Run Code Online (Sandbox Code Playgroud)

  • 我用一个用@varargs 注释的方法做了一个小例子。编译器生成两种方法,一种使用 Seq,另一种使用数组。当 scala 方法用可变参数覆盖 java 方法时,这也由编译器自动完成。由于仍然生成了带有 Seq 的方法,因此问题仍然存在 (2认同)