Java создает экземпляр ArrayList из другого класса - PullRequest
0 голосов
/ 25 августа 2018

Ситуация выглядит следующим образом:

Первый класс:

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 голосов
/ 25 августа 2018

Другие ответы дают прекрасные решения. Но что, если вы do хотите использовать только something в расширенном цикле for?

Вы должны заставить класс реализовать Iterable:

class Something implements Iterable<Object> {

И реализовать метод iterator():

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

Теперь вы можете написать:

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

и это будет приемлемо для компилятора.

Но вы должны делать это только в том случае, если Something is-a Итерируемый из Объектов, то есть, что он по сути моделирует что-то, что должно быть повторено (например, это «как список»). В противном случае, если он просто имеет-1023 * итерируемых объектов, придерживайтесь других предложенных решений.

0 голосов
/ 25 августа 2018

Вы, вероятно, намереваетесь перебрать список внутри вашего 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;
    }
}
0 голосов
/ 25 августа 2018

Ваш 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()){
           ...
        }
    }
}
0 голосов
/ 25 августа 2018

Старайтесь не называть ваш Something экземпляр names.names является членом экземпляра класса Something.Вы пытаетесь перебрать свой класс Something, а не массив names внутри него.

class Main {
    public static void main(String[] args){
        Something something = new Something();
        ...
        for(Object name: something.names){
           do smth;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...