-2
所以这里有这个类,它有一个字段,可以说 Stack<Integer> changed_vertices
和它的私人和可迭代。如果它是一个原始类型变量,我会写一个getter来从其他类中获取值。但我需要从外部(从其他类)迭代此堆栈。如何迭代Java类中的私有集合成员?
我可以实施迭代这个堆栈什么样的“吸”的?由于某些原因,我无法将其从私人更改为大众。
谢谢。
所以这里有这个类,它有一个字段,可以说 Stack<Integer> changed_vertices
和它的私人和可迭代。如果它是一个原始类型变量,我会写一个getter来从其他类中获取值。但我需要从外部(从其他类)迭代此堆栈。如何迭代Java类中的私有集合成员?
我可以实施迭代这个堆栈什么样的“吸”的?由于某些原因,我无法将其从私人更改为大众。
谢谢。
您有多个选项。
简单的返回堆栈:
public Stack<Integer> getChangedVertices()
{
return changed_vertices;
}
返回堆栈为不可修改的列表:
public List<Integer> getChangedVertices()
{
return Collections.unmodifiableList(changed_vertices);
}
返回一个迭代:
public Iterator<Integer> getChangedVertices()
{
return changed_vertices.iterator();
}
接受消费者,并推动堆栈内容进入消费者
public void consumeChangedVertices(Consumer<Integer> action)
{
changed_vertices.stream().forEach(action);
}
等
这一切都取决于呼叫者需要做的和/或应被允许与堆栈做。
在所有选项中,第一个选项似乎是最好的,因为它提供了更多的自由度。非常感谢! – alekscooper1
堆栈的副本?对其迭代器的引用?哪里有问题? – RealSkeptic
问题是我是Java noob)不,我不想复制这个堆栈,因为它需要O(n)次。我能做什么?将引用返回到堆栈并使用此引用进行迭代?这是一种很好的编程风格吗? – alekscooper1
如果您希望客户端可以访问'Stack'及其所有操作,则返回'Stack'。如果你希望他们只能检索一个迭代器,返回一个'Iterable'。如果你希望他们只能访问当前的迭代器,则返回一个'Iterator'。 –