在Kotlin中无法将类型强制转换为'ArrayList <object>'

时间:2018-09-09 10:54:26

标签: android kotlin

我有一些类,并且已经将它们从 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 :(得分:2)

问题在于allCountries是可为空的属性,而allCountriesList必须返回非空值。您可能希望将allCountriesList设置为非null的列表,然后再返回它,这样做很安全,但事实并非如此。

例如,在这两行之间,另一个线程可以获取CPU时间,并将null设置回allCountries,而您不能从allCountriesList = countries return allCountriesList 的获取方法中返回它。 / p>

countries

因此解决方案是返回您知道在此范围内为非空(并且无法从其他线程访问)的列表,val allCountries: List<Country> get() { ... val countries = ArrayList<Country>() ... allCountriesList = countries return countries }

${variableName}