Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 智能转换到';观察者';因为';item.get()';是一个复杂的表达式_Java_Android_Kotlin_Rx Java_Type Inference - Fatal编程技术网

Java 智能转换到';观察者';因为';item.get()';是一个复杂的表达式

Java 智能转换到';观察者';因为';item.get()';是一个复杂的表达式,java,android,kotlin,rx-java,type-inference,Java,Android,Kotlin,Rx Java,Type Inference,我将一个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 e

我将一个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);
}
/**
*对观察员的弱引用列表。
*/
受保护的列表观察员=新的ArrayList();
/**
*为每个观察者调用指定的操作。
*@param action要调用的操作。
*/
受保护的void foreachObserver(@NonNull final INotificationCallback action){
最终列表tempObserverList=新的ArrayList();
最终列表listToRemove=新建ArrayList();
已同步(此){
如果(!hasChanged()){
返回;
}
clearChanged();
if(observer.isEmpty()){
返回;
}
(最后参考项目:观察员){
if(item.get()==null){
listToRemove.add(项目);
}否则{
添加(item.get());
}
}
如果(!listToRemove.isEmpty()){
观察员:removeAll(listToRemove);
}
}
通知(临时观察者列表、操作);
}
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)
}
/**
*对观察员的弱引用列表。
*/
受保护的var观察员:MutableList=ArrayList()
/**
*为每个观察者调用指定的操作。
*@param action要调用的操作。
*/
受保护的foreachObserver(@NonNull操作:INotificationCallback){
val tempObserverList:MutableList=ArrayList()
val listToRemove:MutableList=ArrayList()
已同步(此){
如果(!hasChanged()){
返回
}
clearChanged()
if(observer.isEmpty()){
返回
}
(观察员项目){
if(item.get()==null){
listToRemove.add(项目)
}否则{
tempObserverList.add(item.get())//此行引发错误
}
}
if(listToRemove.isNotEmpty()){
observers.removeAll(listToRemove)
}
}
通知(临时观察者列表、操作)
}
我没有找到解决办法,因为我没有正确理解它。任何指导都将不胜感激

感谢您的时间

因为
item.get()
在检查它和将它添加到列表之间不一定保持不变,您应该将它存储在一个变量中

val x = item.get()
if (x == null) {
  listToRemove.add(item)
} else {
  tempObserverList.add(x) // No more error
}

可能是因为
item.get()
是一个可为空的类型,所以您需要使用例如
确保它不是空的