使用PairList在Kotlin中类型推断失败

时间:2019-01-31 06:37:06

标签: android kotlin

lateinit var dataList: PairList<Car, People>

我想基于对检索特定位置,所以我要做的是:

val pair = Pair(carObj, peopleObj)
val position = dataList.indexOf(pair as Pair<Car, People>)

但是它给我一个类型推断错误,并要求我显式显示类型。我想我已经用as Pair<Car, People>完成了,但是它说这是多余的声明。关于我完全出错的地方有什么想法吗? :)

PairList类:

public class PairList<F, S> extends ArrayList<Pair<F, S>> {

public boolean add(F first, S second) {
    return add(new Pair<>(first, second));
}

public void add(int index, F first, S second) {
    add(index, new Pair<>(first, second));
}

@Override
public int indexOf(Object o) {
    if (o instanceof Pair) {
        return super.indexOf(o);
    } else {
        for (int i = 0; i < size(); i++) {
            Pair<F, S> pair = get(i);
            if (pair != null) {
                if (pair.first.equals(o)) return i;
            } else {
                if (o == null) return i;
            }
        }
        for (int i = 0; i < size(); i++) {
            Pair<F, S> pair = get(i);
            if (pair != null) {
                if (pair.second.equals(o)) return i;
            } else {
                if (o == null) return i;
            }
        }
    }
    return -1;
}

public int indexOf(F first, S second) {
    for (int i = 0; i < size(); i++) {
        Pair<F, S> pair = get(i);
        if (pair != null) {
            if (pair.first.equals(first) && pair.second.equals(second)) {
                return i;
            }
        } else {
            if(first == null && second == null) {
                return i;
            }
        }
    }
    return -1;
}

2 个答案:

答案 0 :(得分:1)

您的PairList类可能正在扩展android.util.Pair;中的Pair类,并且当您在kotlin文件中使用它时,它正在使用kotlin.Pair。原因是您无法进行类型推断。 为了克服这个问题,您有两种解决方案

  1. 只需将Java文件转换为Kotlin
  2. 使用导入android.util.Pair在kotlin中使用Pair类。
    val pair = android.util.Pair(carObj,peopleObj)

答案 1 :(得分:1)

您在android.util.Pair中使用PairList.java,并使用Pair(carObj, peopleObj)创建了kotlin.Pair;

因此,android.util.Pair;中的import kotlin.Pair;替换为PairList.java,一切正常。