java - 智能投射到“ObserverT!!” 是不可能的,因为 'item.get()' 是一个复杂的表达式
问题描述
我将 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
}
推荐阅读
- r - 官员的软回报
- jquery - 如何解决 ReferenceError: Cookies is not defined
- android - 如何每秒使用日期更新此文本视图
- pipe - Angular 7 自定义过滤管不工作
- jmeter - jmeter html报告中的响应时间与请求图
- python - ValueError:在带有dotenv的windwos上嵌入了flaskenv的空字符
- python - python中列表的长度
- python - 我们如何访问列表中的多个字典?
- angularjs - 我想通过 angularjs 中的路由传递学生 ID 来显示学生详细信息。但我做不到
- ios - 仅显示 7 个 uicollectionview 单元格