Я пишу функцию расширения kotlin, которая должна работать только для закрытых классов. Могу ли я определить Generi c Constraint - или что-то подобное, которое служит той же цели - так, чтобы функция расширения работала только на классах, которые являются запечатанным классом?
В моей спецификации c пример У меня есть функция расширения, которая получает порядковый номер типа класса в своем запечатанном классе:
inline fun <reified T : Any> T.sealedClassOrdinal() = T::class.sealedClassOrdinal()
inline fun <reified T : Any> KClass<T>.sealedClassOrdinal() =
java.superclass?.classes?.indexOfFirst { sub -> sub == this@sealedClassOrdinal.java } ?: -1
Прямо сейчас первая функция расширения может быть вызвана на Any
. Я хотел бы расширить его, чтобы расширить только классы закрытого типа. Свойство isSealed
на KClass<T>
предоставляет эту информацию, но я не понимаю, как сказать компилятору. Я хочу что-то вроде этого (псевдокод):
inline fun <reified T where T::class.isSealed> T.sealedClassOrdinal() = T::class.sealedClassOrdinal()
и / или
inline fun <reified T : Any> KClass<T>.sealedClassOrdinal() where this.isSealed =
или любое другое решение, которое могло бы достичь такого поведения.