如何在Java中表示空列表?

3
我有一个类,构造函数需要一个字符串和一个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
为什么不使用 Collections.emptyList - undefined
据我所知,在Java中,[]本身并不是一个东西。而在那些它是一个东西的语言中(如PHP、JS等),它通常表示"数组",这与"ArrayList"是不同的东西。 - undefined
请在发帖前先搜索Stack Overflow。 - undefined
3个回答

11
为了在Java中表示空列表(ArrayList是List的一种),我们使用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文档。
另外,与你的问题无关,但你应该始终编写接口代码

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);

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>]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接