| // TARGET_BACKEND: JVM | |
| // FILE: example/Hello.java | |
| package example; | |
| @FunctionalInterface | |
| public interface Hello<A> { | |
| void invoke(A a); | |
| } | |
| // FILE: example/SomeJavaClass.java | |
| package example; | |
| public class SomeJavaClass<A> { | |
| public void someFunction(Hello<A> hello) { | |
| ((Hello)hello).invoke("OK"); | |
| } | |
| public SomeJavaClass<A> plus(Hello<A> hello) { | |
| ((Hello)hello).invoke("OK"); | |
| return this; | |
| } | |
| public void get(Hello<A> hello) { | |
| ((Hello)hello).invoke("OK"); | |
| } | |
| public void set(int i, Hello<A> hello) { | |
| ((Hello)hello).invoke("OK"); | |
| } | |
| } | |
| // FILE: main.kt | |
| import example.SomeJavaClass | |
| fun box(): String { | |
| var a: SomeJavaClass<out String> = SomeJavaClass() | |
| var result = "fail" | |
| a.someFunction { | |
| result = it | |
| } | |
| if (result != "OK") return "fail 1: $result" | |
| result = "fail" | |
| a + { | |
| result = it | |
| } | |
| if (result != "OK") return "fail 2: $result" | |
| result = "fail" | |
| a[{ | |
| result = it | |
| }] | |
| if (result != "OK") return "fail 3: $result" | |
| result = "fail" | |
| a += { | |
| result = it | |
| } | |
| if (result != "OK") return "fail 4: $result" | |
| result = "fail" | |
| a[0] = { result = it } | |
| if (result != "OK") return "fail 5: $result" | |
| return "OK" | |
| } |