情况看起来像这样:
头等舱
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){
...
}
}
}
它说我为什么不能通过“名称”进行迭代?我在做什么错了?
答案 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
实例names
。 names
是Something
类实例的成员。您正在尝试迭代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()){
...
}
}
}