2012-07-16 55 views
8

为什么下面的代码片段不能编译?具有通用集合的instanceof

if (mangoList instanceof List<Mango>) { System.out.println("true"); } 
  • 你不知道mangoList是一个列表类型。
  • instanceof关键字只适用于原始类型。
  • 您只能使用反射来检查集合的类型。
  • 通用类型在运行前擦除(ans)
  • 该语句可能会导致mangoList被设置为List的实例。

你认为哪一个答案是正确的?

+0

哪个_you_认为是正确答案?为什么? – Bernard 2012-07-16 00:44:01

回答

7

正确答案是您标记为ans的那个。您将能够知道mangoListList,但是您将无法获得其擦除参数的类型。重新选择是没有道理的。

+0

太棒了,是啊,这是我猜测..谢谢你的快速答案 – 2012-07-16 00:15:34

0

但是,您可以使用mangoList instanceof List来检查它是否是某种类型的List。例如,如果您不确定是否有List或Mango对象,这很有用,但不能区分不同类型的列表。为此,我建议您检查第一个元素的类型。

3

1.是“泛型类型在运行期间被擦除”。

2.所以你不能告诉列表的类型。

3.但是您将会认识到mangoList是一个List。