Java从其他类创建ArrayList的实例

时间:2018-08-25 16:54:28

标签: java object arraylist

情况看起来像这样:

头等舱

class Something {
    List<Object> names;
    public Something(){
       this.names = new ArrayList<Object>();    
    }
}

第二堂课,我尝试做类似的事情,但它不起作用:

class Main {
    public static void main(String[] args){
        Something names = new Something();
        ...
        for(Object name: names){
           ...
        }
    }
}

它说我为什么不能通过“名称”进行迭代?我在做什么错了?

4 个答案:

答案 0 :(得分:2)

您可能打算遍历Something类中的列表内部

public static void main(String[] args){
    Something something = new Something();
    // then assign something.names to something
    ...
    for (Object name: something.getNames()) {
        // do something
    }
}

因此,您可能希望公开类中的names列表的吸气剂和吸气剂:

class Something {
    List<Object> names;

    public Something() {
        this.names = new ArrayList<Object>();    
    }

    public List<Object> getNames() {
        return names;
    }

    public void setNames(List<Object> names) {
        this.names = names;
    }
}

答案 1 :(得分:2)

其他答案给出了很好的解决方案。但是,如果您愿意只想在增强型for循环中使用something呢?

您必须使类实现Iterable

class Something implements Iterable<Object> {

并实现iterator()方法:

@Override public Iterator<Object> iterator() {
  return names.iterator(); // for example.
}

现在您可以写:

for (Object object : something) { ... }

,它将被编译器接受。

但是,仅当Something is-a 对象可迭代时,才应该执行此操作,即它在本质上建模应迭代的对象(例如,“像列表”) 。否则,如果仅具有对象的Iterable,则坚持使用其他建议的解决方案。

答案 2 :(得分:1)

尽量不要调用您的Something实例namesnamesSomething类实例的成员。您正在尝试迭代Something类,而不是其中的names数组。

class Main {
    public static void main(String[] args){
        Something something = new Something();
        ...
        for(Object name: something.names){
           do smth;
        }
    }
}

答案 3 :(得分:1)

您的Something类不是List。但是它包含一个List

class Something {
    List<Object> names;

    public List<Object> getNames(){
       this.names = new ArrayList<Object>();    
    }

    public void setNames( List<Object> list ){
       this.names = list;    
    }
}

class Main {
    public static void main(String[] args){
        Something somethingObj= new Something();
       List<Object> newNames = new ArrayList<>();
       newNames.add( new Object() );
       somethingObj.setNames( newNames ); 

        for(Object name: somethingObj.getNames()){
           ...
        }
    }
}