Две функции будут скомпилированы в одну и ту же сигнатуру функции после стирания обобщенных элементов.
Например, это может выглядеть так:
@NotNull
public final String get() {
...
}
Компилятор не может знать, какую функцию вызывать.
Решением этой проблемы могут быть параметры типа reified.
interface Some
interface Other
inline fun <reified T> get() = when (T::class) {
Some::class -> "hey"
Other::class -> null
else -> throw UnsupportedOperationException()
}
Однако тогда вы должны снять ограничения по типу.