gpt4 book ai didi

java - 无法将其智能转换为 'ObserverT!!',因为 'item.get()'是一个复杂的表达式

转载 作者:行者123 更新时间:2023-12-02 12:40:15 25 4
gpt4 key购买 nike

我将Java代码转换为Kotlin(Android Studio的自动转换),并在下面收到此错误:

enter image description here

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 - 无法将其智能转换为 'ObserverT!!',因为 'item.get()'是一个复杂的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62184309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com