
本文介绍了在使用 javatuples 库中的 Pair 类时,当 Pair 的第二个元素是 List 类型,并且在循环中访问该 List 时,可能遇到的无法访问 List 的 size() 方法或元素的问题。通过在循环中使用泛型来明确 Pair 中 List 的类型,可以有效解决此问题,确保 List 的功能正常使用。
在使用 Java 的 javatuples 库时,我们可能会遇到这样的情况:将一个 List 放入 Pair 中,然后在循环遍历 Pair 时,发现无法像正常 List 那样访问其属性和方法,例如 size()。这通常是由于在循环中缺少泛型类型声明导致的。
问题分析
考虑以下代码示例:
import org.javatuples.Pair;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List>> l;
l = new ArrayList>>();
l.add(new Pair<>(1, Arrays.asList(7,9,13)));
System.out.println(l.get(0).getValue0());
System.out.println(l.get(0).getValue1());
for(Pair p: l){
if(p.getValue0().equals(1)) {
System.out.println(p.getValue1());
// 无法调用 p.getValue1().size()
}
}
}
} 在上面的代码中,l 是一个 List,其中包含 Pair 对象。每个 Pair 对象包含一个 Integer 和一个 List
解决方案:使用泛型
这本书并不是一本语言参考书,但它是一个Android开发者去学习Kotlin并且使用在自己项目中的一个工具。我会通过使用一些语言特性和有趣的工具和库来解决很多我们在日常生活当中都会遇到的典型问题。 这本书是非常具有实践性的,所以我建议你在电脑面前跟着我的例子和代码实践。无论何时你都可以在有一些想法的时候深入到实践中去。 这本书适合你吗? 写这本书是为了帮助那些有兴趣 使用Kotlin语言来进行开发的Android开发者。 如果你符合下面这些情况,那这本书是适合你的: 你有相关Android开发和Andro
要解决这个问题,需要在循环中明确指定 Pair 的泛型类型:
import org.javatuples.Pair;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List>> l;
l = new ArrayList<>();
l.add(new Pair<>(1, Arrays.asList(7,9,13)));
System.out.println(l.get(0).getValue0());
System.out.println(l.get(0).getValue1());
for (Pair> p : l) {
if (p.getValue0().equals(1)) {
System.out.println(p.getValue1());
System.out.println("Size of list: " + p.getValue1().size()); // 现在可以访问 size() 方法
}
}
}
} 通过将循环改为 for (Pair
注意事项
- 始终在使用泛型集合时,明确指定泛型类型,以避免类型擦除带来的问题。
- 在循环遍历泛型集合时,也要使用泛型类型声明循环变量。
- 如果仍然遇到类型问题,请检查 javatuples 库的版本,确保使用最新版本。
总结
当在使用 javatuples 库的 Pair 类时,如果 Pair 包含 List,并且在循环中无法访问 List 的方法,请检查循环变量的类型声明。通过使用泛型类型声明,可以确保编译器正确识别 List 的类型,从而可以正常访问 List 的属性和方法。 避免使用原始类型(raw type),即不使用泛型参数的类型声明,例如 Pair 而不是 Pair









