Java ArrayList不带“;“直接访问”;
我有一个实例属性Java ArrayList不带“;“直接访问”;,java,list,arraylist,null,Java,List,Arraylist,Null,我有一个实例属性 private ArrayList<String> list; 但是对于这个类,我仍然可以访问列表,正如您在下面的测试代码中看到的那样 ArrayList<String> list = new ArrayList<String>(); list.add("line0"); list.add("line1"); list.add("line2"); TestList tl = new
private ArrayList<String> list;
但是对于这个类,我仍然可以访问列表,正如您在下面的测试代码中看到的那样
ArrayList<String> list = new ArrayList<String>();
list.add("line0");
list.add("line1");
list.add("line2");
TestList tl = new TestList(list);
list.add(null);
System.out.println(tl.getList().toString());
使用相同的代码进行测试:[line0,line1,line2]
,因此现在它可以正常工作
我的问题:
- 这是一个坏习惯吗
- 有没有更好的解决办法
return e != null && list.add(e);
你只是简单地复制了一份清单,我认为这是一件好事。如果你想将列表的副本返回给另一个对象,你甚至可以这样做。注意:我已经编辑了你的问题,并删除了你关于“糟糕英语”的道歉。你的英语非常好,因此没有必要这样做。是的,这正是我计划做的(返回副本的部分…)谢谢你的回答。你仍然可以做
newtestlist(someArrayList).getList().add(null)
,因为getList
返回内部列表。我将重写ArrayList
。(其中一个原因是能够在需要列表的地方使用它,这是当前实现无法做到的)哦,对不起,我添加了getList()只是为了测试代码,它不应该在那里。编辑:它将使用:returnnewarraylist(list)
public class TestList {
private ArrayList<String> list;
public TestList(ArrayList<String> list) {
ArrayList<String> newList = new ArrayList<String>(list);
while (newList.remove(null));
this.list = newList;
}
public List<String> getList() { //Just for the test code
return list;
}
public boolean add(String e) {
if (e == null) {
return false;
}
return list.add(e);
}
public boolean remove(String e) {
return list.remove(e);
}
}
public List<String> getList() {
return new ArrayList<>(list);
}
public List<String> getList() {
return Collections.unmodifiableList(list);
}
if (e == null) {
return false;
}
return list.add(e);
return e != null && list.add(e);