Итак, сначала я могу объяснить проблему, которую она описывает.Давайте предложим очень надуманный сценарий:
BooleanProvider.java
class BooleanProvider {
@NonNull Boolean wrapMyBoolean(boolean state) {
return new Boolean(state);
}
}
BooleanProviderTest.kt
class BooleanProviderTest {
@Test fun `it returns a true value when true is provided`() {
assertSame(BooleanProvider().wrapMyBoolean(true), true)
}
}
Этоtest на самом деле не пройдёт, потому что экземпляры Boolean
не совпадают.В коде Java мы инициализировали новый экземпляр Boolean
(а не статически определенные экземпляры Boolean.TRUE
и Boolean.FALSE
, которые вы получите, когда примитив автоматически упакован в java.lang.Boolean
).Поэтому, чтобы избежать потенциально неожиданного результата, рекомендуется не сравнивать эти типы по ссылкам.
Самое простое решение - просто изменить тест на равенство на !=
вместо !==
.Это будет выполнять тестирование на равенство идентичности, а не тестирование на равенство ссылок, и будет обрабатывать нулевое значение с любой стороны соответственно.В любом случае это то, что вам нужно в 99% случаев.
Во-вторых, вы также можете просто объявить mCurrentValue
как ненулевой тип и присвоить ему значение по умолчанию, если вам не нужно обрабатыватьнулевое значение определенным образом.Просто объявите это как:
private var mCurrentValue: Boolean = false // false is the default here