Java 数组列表初始化显示为布尔值

Java 数组列表初始化显示为布尔值,java,Java,我正在尝试使用以下构造函数创建一个对象 public PageBreak(String sheetName, ArrayList<Integer> rowPageBreaks, ArrayList<Integer> columnPageBreaks) { this.sheetName = sheetName; this.rowPageBreaks = rowPageBreaks; this.columnPageBreaks = columnPage

我正在尝试使用以下构造函数创建一个对象

public PageBreak(String sheetName, ArrayList<Integer> rowPageBreaks, ArrayList<Integer> columnPageBreaks)
{
    this.sheetName = sheetName;
    this.rowPageBreaks = rowPageBreaks;
    this.columnPageBreaks = columnPageBreaks;
}
公共分页符(字符串sheetName、ArrayList行分页符、ArrayList列分页符)
{
this.sheetName=sheetName;
this.rowPageBreaks=rowPageBreaks;
this.columnPageBreaks=columnPageBreaks;
}
在另一种方法中,我执行以下调用:

pageBreaks.add(new PageBreak(teamResultSheet.getName(),
                new ArrayList<Integer>().add(teamResultSheet.getRowPageBreak()), null));
PageBreak.add(新的PageBreak(teamResultSheet.getName()),
新建ArrayList().add(teamResultSheet.getRowPageBreak()),null);
然后我得到以下错误消息:构造函数PageBreak(String,boolean,null)未定义


如何在现场创建
ArrayList

您需要先填充列表,然后再尝试使用它。下面是正在发生的事情:

  • 您可以实例化一个新的
    ArrayList
  • 您可以立即在该列表中调用
    add
  • add
    的结果是
    boolean
    (因此)
  • 解释的是
    布尔值
    结果,而不是列表

在尝试使用列表之前,您需要填充列表。下面是正在发生的事情:

  • 您可以实例化一个新的
    ArrayList
  • 您可以立即在该列表中调用
    add
  • add
    的结果是
    boolean
    (因此)
  • 解释的是
    布尔值
    结果,而不是列表

虽然Makoto的回答是正确的,并解释了出现此错误的原因,并且在使用ArrayList之前为您提供了创建ArrayList的合理建议,但您可能想知道是否有其他方法可以使代码更简洁

遗憾的是,与Groovy或Kotlin等较新的语言不同,Java没有列表文字作为语言语法。有人试图绕过这一限制;您可能一直在尝试使用代码执行以下操作:

然后您可以像以前一样自由地传递它
ArrayList
s或任何其他类型的
列表

pageBreaks.add(new PageBreak(teamResultSheet.getName(),
               Arrays.asList(teamResultSheet.getRowPageBreak()),
               null);
这看起来更简洁,没有前者的缺点;但是,该列表是固定大小且不可变的

如果您只需要一个元素列表,则使用以下选项更有效:

pageBreaks.add(new PageBreak(teamResultSheet.getName(),
               Collections.singletonList(teamResultSheet.getRowPageBreak()),
               null);

虽然Makoto的回答是正确的,并解释了出现此错误的原因,并且在使用ArrayList之前为您提供了创建ArrayList的合理建议,但您可能想知道是否有其他方法可以使代码更加简洁

遗憾的是,与Groovy或Kotlin等较新的语言不同,Java没有列表文字作为语言语法。有人试图绕过这一限制;您可能一直在尝试使用代码执行以下操作:

然后您可以像以前一样自由地传递它
ArrayList
s或任何其他类型的
列表

pageBreaks.add(new PageBreak(teamResultSheet.getName(),
               Arrays.asList(teamResultSheet.getRowPageBreak()),
               null);
这看起来更简洁,没有前者的缺点;但是,该列表是固定大小且不可变的

如果您只需要一个元素列表,则使用以下选项更有效:

pageBreaks.add(new PageBreak(teamResultSheet.getName(),
               Collections.singletonList(teamResultSheet.getRowPageBreak()),
               null);

调用
add()
方法将返回一个
布尔值。如果您只想创建一个
ArrayList
对象,只需编写
new ArrayList()
@LoganKulinski:如果您下次有答案,请鼓励您写出答案。在注释中留下这样的知识是没有意义的。@Makoto会的,谢谢。调用
add()
方法将返回一个
boolean
。如果您只想创建一个
ArrayList
对象,只需编写
new ArrayList()
@LoganKulinski:如果您下次有答案,请鼓励您写出答案。在注释中留下这样的知识毫无意义。@Makoto会的,谢谢。我故意避免使用双大括号初始值设定项,因为它会降低代码的可读性。我故意避免使用双大括号初始值设定项,因为它会降低代码的可读性。