2012-11-14 49 views
9

有没有在Scala中实现以下Java接口的方法?在Scala中重载使用重载vargs方法的Java接口

public interface Request { 
    void acceptLanguage(Locale... locales); 
    void acceptLanguage(String... locales); 
} 

我想:

override def acceptLanguage(locales: Locale*) : Unit = 
override def acceptLanguage(locales: String*) : Unit = 

但是,这给了我:

error: double definition: 
have same type after erasure 

我试过这样:

override def acceptLanguage(locales: Locale*) (implicit Manifest[Locale]) : Unit = {} 
override def acceptLanguage(locales: String*) (implicit Manifest[String]): Unit = {} 

但如此超控发生故障,给出了一个不同的签名

我使用的是版本2.9.2。

回答

8

使用@varargs注释:

override def acceptLanguage(@varargs locales: Locale*) : Unit = 
override def acceptLanguage(@varargs locales: String*) : Unit = 
+0

我认为这是正确的轨道上。根据我发现的 注解继续这个方法。我仍然得到以下错误: 带有varargs注释的方法产生具有相同签名的转发器方法 – Eduardo

+1

我做了一个小例子,其中一个方法使用@varargs注解。编译器生成两个方法,一个使用Seq,另一个使用数组。当scala方法用可变参数覆盖java方法时,编译器也会自动完成此操作。由于使用Seq的方法仍然生成问题仍然存在 – Eduardo

+0

对,我的答案肯定不能解决您的问题。抱歉,我的回答太仓促了。 – ghik