我无法理解方法.我有方法需要填写,但我真的不明白第一个.Iterable如何成为返回类型以及它是如何使用的?一个例子很棒......
@Override
public Iterable<ClientInterface> getNeighbours() {
return null;
}
@Override
public void addNeighbour(ClientInterface newNeighbour){
//TODO Implement me!
}
@Override
public void removeNeighbour(String clientID) {
//TODO Implement me!
}
Run Code Online (Sandbox Code Playgroud)
小智 8
看起来您的类应该具有Iterable<ClientInterface>类成员的实现,如ArrayList.
我们以此为例:
public class Bus {
private ArrayList<Person> riders;
... //constructors and other methods
public Iterable<Person> getRiders() {
return riders;
}
... //other methods
}
Run Code Online (Sandbox Code Playgroud)
一切都可以是返回类型:枚举,类,接口,int,异常等.
Iterable是一个interface可以用来在foreach调用中使用return的原因(这就是为什么你可以使用for(T something : AnArrayList)因为ArrayList<T>工具Iterable<T>)
现在,我的回答包含一个例子:
我们有一个getNeighbours返回的方法Iterable<ClientInterface>
public Iterable<ClientInterface> getNeighbours()
{
return new Iterable<ClientInterface>();
}
Run Code Online (Sandbox Code Playgroud)
好吧,好吧因为Iterable它只是我们需要实现方法或使用实现的接口.
由于这是我们应该手动完成的事情,我们应该自己实现这些方法.
唯一的方法(在Java8中,有3种方法,但我们将忽略它)是iterator()返回一个iterator.
public Iterable<ClientInterface> getNeighbours()
{
return new Iterable<ClientInterface>()
{
@Override
public Iterator<ClientInterface> iterator()
{
return null;
}
};
}
Run Code Online (Sandbox Code Playgroud)
Iterator 是另一个接口,用于提供迭代集合的逻辑,项目列表等.
我们被迫实现两个方法:hasNext和next
hasNext用于确定是否有更多项要迭代,next用于迭代它.
public Iterable<ClientInterface> getNeighbours()
{
return new Iterable<ClientInterface>()
{
@Override
public Iterator<ClientInterface> iterator()
{
return new Iterator<ClientInterface>()
{
@Override
public boolean hasNext()
{
return false;
}
@Override
public ClientInterface next()
{
return null;
}
};
}
};
}
Run Code Online (Sandbox Code Playgroud)
我们需要记住哪个是我们的最后位置,所以我们将在迭代器中创建一个字段.
public Iterable<ClientInterface> getNeighbours()
{
return new Iterable<ClientInterface>()
{
@Override
public Iterator<ClientInterface> iterator()
{
return new Iterator<ClientInterface>()
{
private int position;
@Override
public boolean hasNext()
{
return false;
}
@Override
public ClientInterface next()
{
return null;
}
};
}
};
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是:我们应该迭代什么?这取决于你,一个例子可能是:
public Iterable<ClientInterface> getNeighbours()
{
return new Iterable<ClientInterface>()
{
@Override
public Iterator<ClientInterface> iterator()
{
return new Iterator<ClientInterface>()
{
private int position;
private ClientInterface[] items = new ClientInterface[]{new ClientInterface(), new ClientInterface()};
@Override
public boolean hasNext()
{
return position != items.length;
}
@Override
public ClientInterface next()
{
if (!hasNext()) throw new NoSuchElementException();
return items[position++];
}
};
}
};
}
Run Code Online (Sandbox Code Playgroud)
请注意我们如何创建一个项目数组并使用我们的两个方法hasNext并next提供迭代它的方法.
每次调用next增加内部指针,我们的hasNext方法只检查指针是否到达数组的末尾.
喜欢收藏ArrayList,LinkedList等已经做的工作,为您和更好的(实现remove方法),你可以通过使用得到这个迭代器ArrayList.iterator()
现在你可以这样写:
for (ClientInterface el : yourClass.getNeighbours())
{
System.out.println(el);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15488 次 |
| 最近记录: |