我如何在java中表示一个空列表?

时间:2016-07-09 23:54:05

标签: java list arraylist

我让这个类有构造函数,将String和Arraylist作为参数;

class Foo{
    String ide;
    ArrayList list;

    public TypeOperator(String ide, ArrayList list){
        this.ide = ide;
        this.list = list;
    }
}

所以当我初始化类如下:

Foo one = new Foo("boo", []);

它会出错。好吧,我可以做到这一点,使它工作:

ArrayList empty = new ArrayList();
Foo one = new Foo("boo", empty);

有没有理由说第一个解决方案不起作用?或者有没有办法做一些改变才能使它工作?谢谢

3 个答案:

答案 0 :(得分:5)

要在Java中表示空列表(ArrayList 列表),我们使用java.util.Collections.emptyList()

所以你可以使用这样的东西:

Foo foo = new Foo("boo", (ArrayList) java.util.Collections.emptyList());

如果您需要其他方法在java中创建新列表,请参阅此答案How to make a new List in Java

现在,您可能已将阵列与ArrayList混合在一起,从而导致使用类似语法[]的数组来创建ArrayList。但这也与语言规范不符,你可以阅读更多关于如何从SO here创建数组,或者总是更好的标准java文档。

而且,与您的问题无关,但您应该always code to an interface

答案 1 :(得分:1)

您的班级Foo的构造函数名称错误,正确的应该是:

class Foo {
  String ide;
  ArrayList list;

  public Foo(String ide, ArrayList list){
    this.ide = ide;
    this.list = list;
  }
}

您的第一个解决方案是错误的,因为您没有将ArrayList的实例传递给构造函数。要创建一个空的ArrayList,您可以使用:

Foo one = new Foo("boo", new ArrayList());

您可以重写Foo类以使用List的泛型类型:

class Foo {
  String ide;
  List list;

  public Foo(String ide, List list){
    this.ide = ide;
    this.list = list;
  }
}

...并使用java.util.Collections.EMPTY_LIST来表示空列表:

Foo one = new Foo("boo", Collections.EMPTY_LIST);

答案 2 :(得分:0)

TypeOperator函数定义需要ArrayList类型的参数。该示例尝试传递空数组文字。

第一个解决方案不正确,因为ArrayList和[]之间存在类型不匹配。

可能的解决方案是将功能定义更改为

    public TypeOperator(String ide, <some-type>[] list){
        this.ide = ide;
        this.list = new ArrayList(list);
    }

可以通过

调用
    TypeOperator("somestring", new <some-type> [<some-dimension>]);