Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList不带“;“直接访问”;_Java_List_Arraylist_Null - Fatal编程技术网

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