50 }
51
52 interface VoidToInt {
53 public int foo();
54 }
55
56 interface TU<T, U> {
57 public T foo(U u);
58 }
59
60 public static <T, U> T exec(TU<T, U> lambda, U x) {
61 return lambda.foo(x);
62 }
63
64 static {
65 //Assignment conversion:
66 VoidToInt f1 = ()-> 3;
67 assertTrue(3 == f1.foo());
68 //Covariant returns:
69 TU<Number, Integer> f2 = (Integer x) -> x;
70 assertTrue(3 == f2.foo(3));
71 //Method resolution with boxing:
72 int res = LambdaConv01.<Integer,Integer>exec((Integer x) -> x, 3);
73 assertTrue(3 == res);
74 //Runtime exception transparency:
75 try {
76 LambdaConv01.<Integer,Object>exec((Object x) -> x.hashCode(), null);
77 }
78 catch (RuntimeException e) {
79 assertTrue(true);
80 }
81 }
82
83 {
84 //Assignment conversion:
85 VoidToInt f1 = ()-> 3;
86 assertTrue(3 == f1.foo());
87 //Covariant returns:
88 TU<Number, Integer> f2 = (Integer x) -> x;
89 assertTrue(3 == f2.foo(3));
90 //Method resolution with boxing:
|
50 }
51
52 interface VoidToInt {
53 public int foo();
54 }
55
56 interface TU<T, U> {
57 public T foo(U u);
58 }
59
60 public static <T, U> T exec(TU<T, U> lambda, U x) {
61 return lambda.foo(x);
62 }
63
64 static {
65 //Assignment conversion:
66 VoidToInt f1 = ()-> 3;
67 assertTrue(3 == f1.foo());
68 //Covariant returns:
69 TU<Number, Integer> f2 = (Integer x) -> x;
70 assertTrue(3 == (Integer)f2.foo(3));
71 //Method resolution with boxing:
72 int res = LambdaConv01.<Integer,Integer>exec((Integer x) -> x, 3);
73 assertTrue(3 == res);
74 //Runtime exception transparency:
75 try {
76 LambdaConv01.<Integer,Object>exec((Object x) -> x.hashCode(), null);
77 }
78 catch (RuntimeException e) {
79 assertTrue(true);
80 }
81 }
82
83 {
84 //Assignment conversion:
85 VoidToInt f1 = ()-> 3;
86 assertTrue(3 == f1.foo());
87 //Covariant returns:
88 TU<Number, Integer> f2 = (Integer x) -> x;
89 assertTrue(3 == f2.foo(3));
90 //Method resolution with boxing:
|