Интеллектуальное приведение к ArrayList <Object>невозможно в Котлине - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть несколько классов, и я преобразовал их из Java в Kotlin .

Это метод Kotlin :

private var allCountriesList: List<Country>? = null

        val allCountries: List<Country>
            get() {

                val locales = Locale.getISOCountries()
                val countries = ArrayList<Country>()

                for (countryCode in locales) {

                    val obj = Locale("", countryCode)
                    Log.i("AMIRA2020", obj.country + " / " + obj.displayName)
                    if (obj.country == "SP" == false && obj.country == "ZG" == false)
                        countries.add(Country(obj.country, obj.displayName, -1))
                }

                Collections.sort(countries) { o1, o2 -> o1.name!!.compareTo(o2.name!!) }

                allCountriesList = countries

                return allCountriesList
            }

Я получаю сообщение об ошибке return, что умный случай невозможен.

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 09 сентября 2018

Проблема заключается в том, что allCountriesList является обнуляемым свойством, а allCountries должно возвращать ненулевое значение. Вы можете ожидать, что установка allCountriesList в ненулевой список List перед возвратом делает это безопасным, но это не так.

Например, между этими двумя строками другой поток может получить процессорное время и установить для allCountriesList значение null, которое вы не можете вернуть из получателя allCountries.

allCountriesList = countries
return allCountriesList

Таким образом, решение состоит в том, чтобы вернуть список, который, как вы знаете, является ненулевым в этой области (и недоступен из других потоков), countries:

val allCountries: List<Country>
    get() {

        ...
        val countries = ArrayList<Country>()
        ...

        allCountriesList = countries

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