我有以下问题:
如果我有以下代码行:
List<Position> allPos = posDBM.getAllPos();
Position
是一个对象
posDBM
是一个SQLite数据库管理器类,用于管理SQLite数据库,
getAllPos()
返回所有数据库数据。
getAllPos()
的返回类型为List<Position>
。
如果我想初始化List<>
这样的List<Position> pos = new
,我必须指定List
的类型(ArrayList,LinkedList等)。
回到我的问题,在我从数据库填充列表后,我有什么样的List?
我猜它是ArrayList
,但我找不到任何来源支持这个。这只是一个有趣的问题......
答案 0 :(得分:8)
你不必知道;这才是重点。界面对您而言非常重要,而不是实施。
如果不查看该方法的来源,您无法知道。但即使你这样做,对你的客户来说也是无关紧要的。你所说的都是List
方法。
答案 1 :(得分:2)
您将在getAllPos()源代码中找到。由于Polymorphism List<Position>
将接受实现List接口的所有类。
答案 2 :(得分:1)
返回的List<Position>
是通用列表或Strongly Typed
列表。您询问的选项是ArrayList
,它指定了可以占用任何对象的列表。使用ArrayList
进行书写/阅读时,这将需要开箱装箱和取消装箱。
答案 3 :(得分:1)
理想情况下,您不应该担心实际的实现,一旦从方法调用返回List,您就可以像这样迭代它。
List<Position> allPos = posDBM.getAllPos();
for(Position position : allPos){
//Your code goes here
}
如果你想初始化一个新列表,你可以通过使用List接口的不同实现以多种方式完成它,现在你想要选择哪种实现取决于你的要求。
答案 4 :(得分:1)
你只是好奇,然后找到的方法是做这样的事情:
List<Position> allPos = posDBM.getAllPos();
System.out.println("The class is " + allPos.getClass().getName());
当然,您不需要 知道...因为您不需要自己实例化列表实现类。数据库管理代码处理它。
答案 5 :(得分:0)
我建议你在posDBM.getAllPos()之后添加一个断点并查看allPos变量,调试器应该告诉你Type。