y
06/08/2025, 12:53 PMsealed class Base() {
abstract val bar: Bar
fun interface Bar {
fun frobnicate(a: Int, b: String)
}
}
class Derived : Base() {
override val bar: Bar get() = ::DC // ERROR: Return type mismatch: expected 'Base.Bar', actual 'Function2<Int, String, Unit>'.
}
data class DC(val a: Int, val b: String)
vs
sealed class Base(val bar: Bar) {
fun interface Bar {
fun frobnicate(a: Int, b: String)
}
}
class Derived : Base(::DC) // works
data class DC(val a: Int, val b: String)
the second one compiles. how do I get the first one to compile? do I require an explicit cast to Bar
?
EDIT: is it because `fun interface`s get "promoted" when passed directly like this?Youssef Shoaib [MOD]
06/08/2025, 1:04 PMYoussef Shoaib [MOD]
06/08/2025, 1:06 PMsealed class Base() {
abstract val bar: Bar
fun interface Bar {
fun frobnicate(a: Int, b: String)
}
}
class Derived : Base() {
override val bar get() = Bar(::DC)
}
data class DC(val a: Int, val b: String)
y
06/08/2025, 1:12 PMy
06/08/2025, 1:13 PMfun interface
, making frobnicate
an abstract fun
and writing override fun bar(a: Int, b: String) = DC(a, b)
(however override fun bar(a: Int, b: String) = ::DC
did not)