2012-11-14 22 views
9

Scala'da aşağıdaki Java arabirimini uygulamak için bir yol var mı?Scala'da aşırı yüklü varyasyonlarla Java arabirimini geçersiz kılma yöntemleri

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

Ama bu beni verir:

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

denedim

error: double definition: 
have same type after erasure 

Ve bu çalıştı:

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

Ama kılma başarısız böylece farklı bir imza verir

Sürüm 2.9.2 kullanıyorum.

cevap

8

Kullanım @varargs açıklama:

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

bu doğru yolda olduğunu düşünüyorum. Ne bulduğuma göre ek açıklama yöntemi devam ediyor. Yine de şu hatayı alıyorum: Bir varargs ek açıklama içeren bir yöntem, aynı imza – Eduardo

+1

ile bir iletici yöntemi üretir. @ Varargs ile açıklanmış bir yöntemle küçük bir örnek yaptım. Derleyici, biri Dizi, diğeri diziyle olmak üzere iki yöntem oluşturur. Bu, scala yönteminin varargs ile bir java yöntemini geçersiz kıldığı zaman, derleyici tarafından otomatik olarak yapılır. Seq ile yöntemler hala üretildiğinden, sorun hala – Eduardo

+0

olur, Cevabım kesinlikle sorununuzu çözmüyor. Cevabımla acele ettiğim için üzgünüm. – ghik