Ищете объяснение с ошибкой Kotlin ненулевого утверждения в Android приложении? - PullRequest
1 голос
/ 22 апреля 2020

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

Мой вопрос об этой конкретной ошибке относится к следующим строкам:

if (months?.toInt() == 1) { monthsText = "1 Mo " }
if (months?.toInt() > 1) { monthsText = String.format("%d Mos ", months) }

Первая строка с == компилируется нормально, но> 1 дает нулевое утверждение. Я добавил скриншот ошибки и фрагмент кода. Кстати, если есть лучший способ кодирования, это может помочь в моем понимании проблемы.

Если я добавлю !! как отмечено в ошибке, она компилируется и запускается, но если переменная месяцев равна нулю, что может быть причиной сбоя приложения.

Я не очень понимаю, почему == будет отличаться от>

enter image description here

В базе данных, из которой я получаю эти данные, хранится «yearsMonthsExperience» как «1205» (ГГММ).

val yearsMonths= (markerData.mMarkerUser!!["yearsMonthsExperience"] as? String)?.padStart(4, '0')
val years = yearsMonths?.take(2)?.toInt()
val months = yearsMonths?.takeLast(2)?.toInt()
var yearsText = ""
if (years != null && years == 1) { yearsText = "1 Yr " }
if (years != null && years > 1) { yearsText = String.format("%d Yrs ", years) }
var monthsText = ""
if (months?.toInt() == 1) { monthsText = "1 Mo " }
if (months?.toInt() > 1) { monthsText = String.format("%d Mos ", months) }
mInfoView.lbYearsExperience.text = String.format("%s%s Exp.", yearsText, monthsText)

Заранее спасибо за любые объяснения или помощь.

1 Ответ

2 голосов
/ 22 апреля 2020

> является переопределенным оператором. Это только syntacti c сахар.

Таким образом, ваше утверждение if на самом деле выглядит так: months?.toInt().compareTo(1)

Чтобы заставить его работать, вам нужно присвоить ему значение по умолчанию примерно так: months?.toInt()?:0 > 1.

Подробнее о перегрузке операторов вы можете прочитать здесь: https://kotlinlang.org/docs/reference/operator-overloading.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...