我让这个类有构造函数,将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);
有没有理由说第一个解决方案不起作用?或者有没有办法做一些改变才能使它工作?谢谢
答案 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>]);