您編寫的代碼按原樣工作。
scala編譯器將生成一個橋接方法,該方法實現從Java中看到的簽名並轉發到Scala實現。
這裏有你的類真棒正是因爲你寫它運行的javap -c的結果,
public class Awesome implements Footastic,scala.ScalaObject {
public void foo(scala.collection.Seq<Foo>);
Code:
0: getstatic #11 // Field scala/Predef$.MODULE$:Lscala/Predef$;
3: ldc #14 // String WIN
5: invokevirtual #18 // Method scala/Predef$.println:(Ljava/lang/Object;)V
8: return
public void foo(Foo[]);
Code:
0: aload_0
1: getstatic #11 // Field scala/Predef$.MODULE$:Lscala/Predef$;
4: aload_1
5: checkcast #28 // class "[Ljava/lang/Object;"
8: invokevirtual #32 // Method scala/Predef$.wrapRefArray:([Ljava/lang/Object;)Lscala/collection/mutable/WrappedArray;
11: invokevirtual #36 // Method foo:(Lscala/collection/Seq;)V
14: return
public Awesome();
Code:
0: aload_0
1: invokespecial #43 // Method java/lang/Object."<init>":()V
4: return
}
第一個foo的方法與序列<富>參數對應於Scala的可變參數方法真棒。具有Foo []參數的第二個foo方法是Scala編譯器提供的橋接方法。