
[英]How do you create a generic method in Java where one of the parameterized types must implement Iterable?
[英]Java implement Iterable, for each and method
我在本练习中使用了要实现的算法。 我有这个主要的:
public static void main(String[] args) {
Person a = new Person("Tony");
Person c = new Person("Luke");
Person o = new Person("Ann");
a.addFriends(c);
a.addFriends(o);
for(Person p: a.contacts())
System.out.println(p);
}
如果我将“ a.contacts()”替换为“ a”并使用此类,则代码有效! 但是,如何使用“ a.contacts()”实现for-each循环? 谢谢
class Person implements Iterable<Person> {
private Set<Person> friends = new HashSet<Person>();
private String name;
public Person(String name){
this.name = name;
}
public void addFriends(Person o){
friends.add(o);
}
public String toString(){
return this.name;
}
@Override
public Iterator<Person> iterator() {
Iterator<Person> i = friends.iterator();
return i;
}
//Here the contacts method to implement!!
}
让您的contacts()
方法的返回类型为Set of Person
...。
public Set<Person> contacts() {
return friends;
}
所以现在下面的工作了...
for (Person p : a.contacts()) {
System.out.println(p);
}
由于您要为Person
运行一个循环,因此:
旁边的位置应该是Person
类型的集合。
for(Person p: a.contacts())
System.out.println(p);
您可以为此选择一个List
或Set
,然后从Person
类的contacts()
方法返回集合。
在这种情况下,因为您已经Set
所以将其返回。
public Set<Person> contacts() {
return friends;
}
使用Collection <T>进行此操作与使用Iterable <T>进行操作不同。 Iterable <T>的实现允许延迟加载,而基于Collection <T>的实现则要求您在返回之前填充整个集合。 解决您的需求的正确方法是在类“ Person”中实现以下方法:
public Iterable<Person> contacts() {
return new Iterable<Person>() {
public Iterator<Person> iterator() {
return friends.iterator();
}
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.