智能转换为 'ObserverT!!' 是不可能的,因为 'item.get()' 是一个复杂的表达式
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
}
我将 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
}