#kotlin #generics
Вопрос:
Я хочу, чтобы во время выполнения было что-то подобное, чтобы проверить, что значение, допускающее значение null, не равно нулю в отладочных сборках, утверждение отладки, как и в проектах C/C , согласно соглашению о наличии такого разного уровня утверждений,
val <T> T.debugAssertNotNull: T
get() = this ?: throw NullPointerException("A debug only assert has happened")
Это работает нормально, за исключением того, что было бы просто приятнее, если бы этот T автоматически мог принимать только значения, допускающие значение null, или, по крайней мере, намекать, когда передается значение, не являющееся нулевым
"123".debugAssertNotNull
или когда «?.» случайно используется вместо».».,
val a: String? = null
val b = a?.debugAssertNotNull
был передан используемый, возможно ли это, или каждый ненулевой тип в любом случае наследуется от его варианта, допускающего обнуление, что делает это невозможным?
Комментарии:
1. «каждый ненулевой тип наследуется от его варианта, допускающего значение null» Да,
T
является подтипомT?
для любого ненулевогоT
типа .2. Вы, кажется, изобретаете
!!
оператора заново, если я правильно понимаю?3. Вы, кажется, ищете assertNotNull
4. В JVM существует только один уровень утверждений (утверждения включены/отключены, см. herongyang.com/Java/Assertion-JVM-ea-and-da-Options.html ); не уверен в других целях котлина
5. Это проверка только для отладки и заменена на noop в выпуске, этот тип проверок популярен в других средах. Если вы уверены, что это невозможно, просто укажите это в качестве ответа, и я отмечу это как принятое. Спасибо 🙂