-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'。 –