spand
08/16/2016, 1:19 PMclass InferenceTest {
interface Foo
class Bar : Foo
inline fun <reified T:Any, F:T> assertClassesFails(bar : F) : T {
Assert.assertEquals(Foo::class.java, T::class.java)
Assert.assertEquals(Bar::class.java, (bar as Any).javaClass)
return bar
}
inline fun <reified T:Any, F:Any> assertClassesPasses(bar : F) : T {
Assert.assertEquals(Foo::class.java, T::class.java)
Assert.assertEquals(Bar::class.java, (bar as Any).javaClass)
return bar as T
}
@Test
fun foo(){
var foo : Foo = assertClassesPasses(Bar())
println("Passed")
var foo2 : Foo = assertClassesFails(Bar())
}
}