Можно ли принудительно аннулировать шаблон?

#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 в выпуске, этот тип проверок популярен в других средах. Если вы уверены, что это невозможно, просто укажите это в качестве ответа, и я отмечу это как принятое. Спасибо 🙂