我有一些类,并且已经将它们从 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
语句中收到一个错误,说不可能有明智的案例。
任何人都可以帮忙吗?
答案 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}