File tree Expand file tree Collapse file tree 6 files changed +74
-51
lines changed Expand file tree Collapse file tree 6 files changed +74
-51
lines changed Original file line number Diff line number Diff line change
1
+ import scala .annotation .varargs
2
+
3
+ object VarArgs {
4
+ @ varargs
5
+ def two (a : Int )(b : String * ): Nothing = ???
6
+
7
+ @ varargs
8
+ def twoPrimitive (a : Int )(b : Int * ): Nothing = ???
9
+
10
+ @ varargs
11
+ def three (a3 : Int )(b3 : String )(c3 : String * ): Nothing = ???
12
+
13
+ @ varargs
14
+ def threePrimitive (a3 : Int )(b3 : String )(c3 : Int * ): Nothing = ???
15
+
16
+ @ varargs
17
+ def emptyOk ()()(xs : String * ): Nothing = ???
18
+ }
Original file line number Diff line number Diff line change
1
+ import scala .annotation .varargs
2
+
3
+ object VarArgs {
4
+ @ varargs
5
+ def foo1 [A ](x : A , xs : String * ): A = ???
6
+
7
+ @ varargs
8
+ def foo2 [A ](x : List [A ], xs : String * ): A = ???
9
+
10
+ @ varargs
11
+ def foo3 [A ](n : Int * ): Unit = ???
12
+
13
+ @ varargs
14
+ def bar1 [A ](x : A * ): Unit = ???
15
+
16
+ @ varargs
17
+ def bar2 [A ](x : A , xs : A * ): A = ???
18
+
19
+ @ varargs
20
+ def bar3 [A <: Comparable [A ]](xs : A * ): A = ???
21
+ }
Original file line number Diff line number Diff line change 2
2
3
3
public class Test {
4
4
public static void main (String [] args ) {
5
- ClassImplementsClass c = new ClassImplementsClass ();
5
+ VarargImplClass c = new VarargImplClass ();
6
6
7
- c .x ("a" , "b" , "c" );
7
+ c .x (0 , 1 , 2 );
8
8
c .y ("a" , "b" , "c" );
9
9
c .z ("a" , "b" , "c" );
10
+ c .generic ("a" , "b" , "c" );
11
+ c .genericBounded ("a" , "b" , "c" );
10
12
11
- VarargAbstractClass <String > i = new ClassImplementsClass ();
13
+ VarargAbstractClass <String > i = new VarargImplClass ();
12
14
13
- i .x ("a" , "b" , "c" );
15
+ i .x (0 , 1 , 2 );
14
16
i .y ("a" , "b" , "c" );
15
- // i.z("a", "b", "c");
16
- // ClassCastException at runtime because the generated
17
- // signature of z doesn't mention the type parameter (it should)
17
+ i .z ("a" , "b" , "c" );
18
+ i .generic ("a" , "b" , "c" );
19
+ i .genericBounded ("a" , "b" , "c" );
20
+
21
+ VarargClassBounded <String > b = new VarargClassBounded <>();
22
+ b .v1 ("a" , "b" , "c" );
23
+ b .v2 ("a" , "b" , "c" );
18
24
}
19
25
}
Original file line number Diff line number Diff line change @@ -2,17 +2,32 @@ import scala.annotation.varargs
2
2
3
3
abstract class VarargAbstractClass [T ] {
4
4
@ varargs
5
- def x (els : String * ): Int
5
+ def x (v : Int * ): Int
6
6
7
7
@ varargs
8
- def y (els : String * ): Int
8
+ def y (v : String * ): Int
9
9
10
10
@ varargs
11
- def z (els : T * ): Int
11
+ def z (v : T * ): Int
12
+
13
+ @ varargs
14
+ def generic [E ](e : E * ): Unit = ()
15
+
16
+ @ varargs
17
+ def genericBounded [E <: Comparable [E ] & Serializable ](e : E * ): Unit = ()
18
+ }
19
+
20
+ class VarargImplClass extends VarargAbstractClass [String ] {
21
+
22
+ override def x (v : Int * ): Int = v.length
23
+ override def y (v : String * ): Int = v.length
24
+ override def z (v : String * ): Int = v.length
12
25
}
13
- class ClassImplementsClass extends VarargAbstractClass [String ] {
14
26
15
- override def x (els : String * ): Int = els.length
16
- override def y (els : String * ): Int = els.length
17
- override def z (els : String * ): Int = els.length
27
+ class VarargClassBounded [B <: Comparable [B ]] {
28
+ @ varargs
29
+ def v1 (v : B * ): Unit = ()
30
+
31
+ @ varargs
32
+ def v2 (first : B , more : B * ): B = first
18
33
}
Load Diff This file was deleted.
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments