Я хочу знать, можно ли заставить kotlin выводить ненулевое значение вывода данного типа.Рассмотрим следующий пример:
abstract class Wrapper<T>
class StringWrapper : Wrapper<String>()
fun <O, P> wrap(property: KProperty1<O, P>, wrapper: Wrapper<P>) {
}
Когда я вызываю wrap
для свойства, не допускающего обнуление, все работает отлично:
data class NonNullableExample(val value: String)
wrap(NonNullableExample::value, StringWrapper())
Но когда я вызываю wrap
для обнуляемогосвойство, я получаю ошибку компилятора, потому что логический вывод P
обнуляем, тогда как StringWrapper
не является:
data class NullableExample(val value: String?)
wrap(NullableExample::value, StringWrapper())
Сбой логического вывода: невозможно определить параметр типа P
в
fun <O, P> wrap(property: KProperty1<O, P>, wrapper: Wrapper<P>): Unit
Ни одна из следующих замен
(KProperty1<NullableExample, String>, Wrapper<String>)
(KProperty1<NullableExample, String?>, Wrapper<String?>)
может применяться к
(KProperty1<NullableExample, String?>, StringWrapper)
Так что, в принципе, я хочу, независимо от того, является ли P
обнуляемым или не обнуляемым, P
из Wrapper<P>
всегда должно быть ненулевой формойP
.Это возможно?