Предупреждение безопасности Kotlin Null Неожиданные токены (используйте, чтобы разделить выражения на одной строке)

Я пробовал оператор Элвиса в коде Kotlin в своем заявлении и получил следующее предупреждение:

Unexpected tokens (use ; to seperate expressions on the same line) 

Код:

  var key: String = "KEY is" /* "check" is name of String variable which can be null Warning coming on following statement*/ var str : String = check?key.replace("KEY", "ABDS-ASDSA-DSSS")?:check 

Есть идеи, как это решить?

Я бы не понял, зачем вам нужны нулевые операторы. Ни одна из ваших переменных не имеет значения NULL.


Вы написали

 check?key.replace("KEY", "ABDS-ASDSA-DSSS")?:check 

? (после check ) не является оператором в Котлине.

Возможно, вам понадобился тройной условный оператор, который просто заменяется на if else .

Судя по вашему комментарию, вам, похоже, нужен оператор безопасного вызова, хотя это и есть ?. , не ? ,

 check?.key?.replace("KEY", "ABDS-ASDSA-DSSS") ?: check 

Существует различие между оператором Элвиса и оператором безопасного вызова. Оператор Elvis работает с выражением, в то время как оператор безопасного вызова – это просто нулевой доступ к свойствам или вызов метода .

Оператор Elvis возвращает свой первый операнд, если он не является нулевым, и возвращает второй операнд в противном случае.

?. оператор возвращает null если приемник имеет значение null, в противном случае он возвращает результат вызова.

kotlin не поддерживает тернарный оператор.

и даже check не является boolean переменной в вашем случае сделать ее логической или использовать как

 var check: String = "something here" var key: String = "KEY is" /*Warning coming on following statement*/ var str : String = key.replace("KEY", "ABDS-ASDSA-DSSS")?:check