Il codice che hai scritto funziona così com'è.
Il compilatore scala genererà un metodo bridge che implementa la firma come visto da Java e in avanti per l'implementazione Scala.
Ecco il risultato dell'esecuzione di javap -c sulla tua classe impressionante esattamente come l'avete scritto,
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
}
Il primo metodo foo con con Seq < Foo> argomento corrisponde alla Scala varargs metodo impressionante. Il secondo metodo foo con l'argomento Foo [] è il metodo bridge fornito dal compilatore Scala.
fonte
2011-09-23 19:08:17