我正在尝试使用以下构造函数
创建一个对象public PageBreak(String sheetName, ArrayList<Integer> rowPageBreaks, ArrayList<Integer> columnPageBreaks)
{
this.sheetName = sheetName;
this.rowPageBreaks = rowPageBreaks;
this.columnPageBreaks = columnPageBreaks;
}
在另一种方法中,我进行以下调用:
pageBreaks.add(new PageBreak(teamResultSheet.getName(),
new ArrayList<Integer>().add(teamResultSheet.getRowPageBreak()), null));
然后我收到以下错误消息:构造函数PageBreak(String,boolean,null)未定义。
如何在现场制作ArrayList<Integer>
?
答案 0 :(得分:3)
您希望在尝试使用之前填充列表。这是正在发生的事情:
ArrayList<Integer>
。add
。add
的结果为boolean
(因此always returns true)。boolean
结果是解释的内容,不列表。答案 1 :(得分:1)
虽然Makoto的答案是正确的,并解释了为什么你会收到这个错误,并在你使用之前给出合理的建议来创建你的ArrayList,你可能想知道是否还有其他方法可以使你的代码更简洁。
与更新的语言(例如Groovy或Kotlin)不同,Java遗憾的是没有List文字作为语言语法。已经有一些尝试来解决这个限制;您尝试使用代码的是double brace initialization idiom:
pageBreaks.add(new PageBreak(teamResultSheet.getName(),
new ArrayList<Integer>() {{add(teamResultSheet.getRowPageBreak());}},
null);
虽然这可能看起来很可爱,但它确实有其缺点,如上面的链接所述。
你真的需要将实际的ArrayList
传递给你的构造函数吗?为什么不让它List
,这会使它更灵活:
public PageBreak(String sheetName, List<Integer> rowPageBreaks, List<Integer> columnPageBreaks)
{
...
}
然后你可以像以前那样自由地传递它ArrayList
,或任何其他类型的List
:
pageBreaks.add(new PageBreak(teamResultSheet.getName(),
Arrays.asList(teamResultSheet.getRowPageBreak()),
null);
这看起来更简洁,并没有以前的缺点;但是,列表是固定大小和不可变的。
如果您只想要单个元素列表,那么使用以下内容会更有效:
pageBreaks.add(new PageBreak(teamResultSheet.getName(),
Collections.singletonList(teamResultSheet.getRowPageBreak()),
null);