2012-11-14 11 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でアノテーションされた1つのメソッドで小さな例を作成しました。コンパイラは、1つはSeq、もう1つは配列を持つ2つのメソッドを生成します。これは、scalaメソッドがvarargsを使用してJavaメソッドをオーバーライドするときに、コンパイラによって自動的に行われます。 Seqのメソッドがまだ生成されているので、問題はまだ発生します – Eduardo

+0

私の答えは確かにあなたの問題を解決しません。私の答えはあまりにも急いで申し訳ありません。 – ghik

関連する問題