2012-11-14 85 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