我正在尝试遍历两个不同类型的ArrayList字段。虽然我可以为每种类型编写方法,但是有没有办法仅用一个方法对其进行迭代?我似乎不太清楚是否可以将字段作为方法参数传递。在下面的代码中,方法iteratePhrase()
应该打印出两个ArrayList中的所有元素。在其中,[...]表示numbers
或letters
。
import java.util.ArrayList;
import java.util.List;
public class Phrase {
private List<Number> numbers;
private List<Letter> letters;
public Phrase() {
numbers;
letters;
}
public void iteratePhrase() {
for (int i=0; i<[...].size(); i++)
System.out.println([...].get(i));
}
}
答案 0 :(得分:3)
您可以将iteratePhrase
设为通用,即使其为List<T>
;喜欢
public <T> void iteratePhrase(List<T> al) {
for (int i = 0; i < al.size(); i++) {
System.out.println(al.get(i));
}
}
您还可以使用for-each
这样的循环
for (T t : al) {
System.out.println(t);
}
无论哪种情况,您都可以致电
iteratePhrase(numbers);
和
iteratePhrase(letters);
答案 1 :(得分:2)
您可以使用Java 8流:
public <T> void iteratePhrase(List<T> al) {
al.stream.forEach(System.out::println);
}
答案 2 :(得分:1)
您可以使numbers
和letters
都扩展一个公共类,例如IterableObject
。
然后,像这样迭代
public void iteratePhrase(List<IterableObject> l) {
for (int i = 0; i < l.size(); i++) {
System.out.println(l.get(i));
}
}
或这个
public void iteratePhrase(List<IterableObject> objects) {
for (IterableObject object : objects) {
System.out.println(object);
}
}
但是,iteratePhrase
函数将只接受扩展了IterableObject
的对象,这与上面对泛型的回答不同。