我使用的是开源代码,其中一个API返回List<String>
而List
是interface
。我知道他们是这样设计的,以使API更通用,但我该如何使用它?我只想得到结果。如果我尝试类似:如何在Java中获取返回类型为List接口的对象?
ArrayList<String> list = (ArrayList<String>) ...
我收到一个ArrayList cannot be cast to java.util.ArrayList
错误。
我使用的是开源代码,其中一个API返回List<String>
而List
是interface
。我知道他们是这样设计的,以使API更通用,但我该如何使用它?我只想得到结果。如果我尝试类似:如何在Java中获取返回类型为List接口的对象?
ArrayList<String> list = (ArrayList<String>) ...
我收到一个ArrayList cannot be cast to java.util.ArrayList
错误。
为什么不使用界面?
List list = (..your method call..)
如果API返回的列表是不同的实现List
接口(即不ArrayList
)的,则无法将其转换为ArrayList
。您可以构建一个新的ArrayList
并使用从API获得的List
进行初始化,但我没有看到这一点。
您正在使用的API正在返回一些List
接口的实现。您无需关心他们目前正在使用哪个实施。这就是使用接口的一点 - 它们可以在明天更改实现,但由于API返回接口类型,所以使用该API的任何代码都不必更改。
是不是列出了一个没有实现就无法使用的接口? – pandagrammer 2014-12-07 07:44:41
@pandagrammer您正在使用的API正在返回List接口的一些实现。你不需要关心他们正在使用的实现。这就是使用接口的一点 - 它们可以在明天更改实现,但由于API返回接口类型,所以使用该API的任何代码都不必更改。 – Eran 2014-12-07 07:47:20
如果你的API返回列表,那么你可以做到以下几点,让列表的所有操作,如:
List list = myobject.mymethod();
然后不管列表实现像ArrayList
或LinkedList
等,你可以仍然添加/删除/迭代/等。在列表中,因为您已经从mymethod返回的内容引用了ArrayList。
您试图执行哪些功能,无法在List类型的对象上完成? – 2014-12-07 07:43:45