2012-05-19 59 views
4

在Eclipe,Java中,我正在研究一种方法,它处理一堆东西,最后需要返回带有参数Element的生成列表。这个列表可能是null,在这种情况下,我希望方法返回一个空列表。这是为了防止需要if(list != null)检查,因为语句使用空列表。尝试避免返回NULL时输入类型安全警告

我这样做以下列方式:

return tempList == null ? Collections.EMPTY_LIST : tempList; 

然而,这给出了以下警告:

类型安全性:类型列表中表达选中需要转换成comfirm到List<Element>

Eclipse建议的所有解决方案都不起作用。我猜想问题是Collections.EMPTY_LIST返回一个通用列表,但不知道如何解决这个问题。

回答

7

如果您确实想要避免局部变量声明,请使用此语法。

return elements == null ? Collections.<Element>emptyList() : elements; 
7

使用Collections.emptyList()获得空的,类型安全且不可变的列表。

+0

谢谢,如果我按照以下步骤做了这个窍门: 列表 emptyList = Collections.emptyList(); return tempList == null? emptyList:tempList; 猜测它不可能避免局部变量,因为你需要知道类型。 – Sven

+0

查看@ Rangi的回答。 – Jeremy

+0

因为无论如何你现在有两行,所以我会这样做'if(tempList == null)tempList = Collections.emptyList();' – yshavit

0

为什么不直接返回new ArrayList<Element>()

+4

这取决于客户端将如何使用返回列表。如果客户端代码会修改它(例如添加),那么返回新列表是唯一的方法。如果不是,那么Collections.emptyList()更具可读性,并减少不必要的新对象的创建。 –

相关问题