[英]Smart cast to 'ObserverT!!' is impossible because 'item.get()' is a complex expression
我將 Java 代碼轉換為 Kotlin (Android Studio 的自動轉換),我在下面收到此錯誤:
Java 方法如下所示:
/**
* The list of weak reference to the observers.
*/
protected List<WeakReference<ObserverT>> observers = new ArrayList<>();
/**
* Calls the specified action for each observer.
* @param action action to be called.
*/
protected void foreachObserver(@NonNull final INotificationCallback<ObserverT> action) {
final List<ObserverT> tempObserverList = new ArrayList<>();
final List<WeakReference<ObserverT>> listToRemove = new ArrayList<>();
synchronized (this) {
if (!hasChanged()) {
return;
}
clearChanged();
if (observers.isEmpty()) {
return;
}
for (final WeakReference<ObserverT> item : observers) {
if (item.get() == null) {
listToRemove.add(item);
} else {
tempObserverList.add(item.get());
}
}
if (!listToRemove.isEmpty()) {
observers.removeAll(listToRemove);
}
}
notify(tempObserverList, action);
}
Kotlin中的轉換代碼:
/**
* The list of weak reference to the observers.
*/
protected var observers: MutableList<WeakReference<ObserverT>> = ArrayList()
/**
* Calls the specified action for each observer.
* @param action action to be called.
*/
protected fun foreachObserver(@NonNull action: INotificationCallback<ObserverT>) {
val tempObserverList: MutableList<ObserverT> = ArrayList()
val listToRemove: MutableList<WeakReference<ObserverT>> = ArrayList()
synchronized(this) {
if (!hasChanged()) {
return
}
clearChanged()
if (observers.isEmpty()) {
return
}
for (item in observers) {
if (item.get() == null) {
listToRemove.add(item)
} else {
tempObserverList.add(item.get()) // This line throws an error
}
}
if (listToRemove.isNotEmpty()) {
observers.removeAll(listToRemove)
}
}
notify(tempObserverList, action)
}
我沒有找到解決方案,因為我沒有正確理解它。 任何指導將不勝感激。
謝謝你的時間
由於item.get()
在您檢查它並將其添加到列表之間不一定保持不變,因此您應該將其存儲在一個變量中。
val x = item.get()
if (x == null) {
listToRemove.add(item)
} else {
tempObserverList.add(x) // No more error
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.