package test abstract class A(val param : R) { abstract fun getO() : R abstract fun getK() : R } inline fun doWork(crossinline jobO: ()-> R, crossinline jobK: ()-> R, param: R) : A { val s = object : A(param) { override fun getO(): R { return jobO() } override fun getK(): R { return jobK() } } return s; } inline fun doWorkInConstructor(crossinline jobO: ()-> R, crossinline jobK: ()-> R, crossinline param: () -> R) : A { val s = object : A(param()) { val o1 = jobO() val k1 = jobK() override fun getO(): R { return o1 } override fun getK(): R { return k1 } } return s; }