Mam kod, który pobiera dwuczęściowy wykres jako dane wejściowe i zwraca mapę z kluczem "1" z wartością, która jest listą "węzłów w zestawie1" i kluczem "2", którego wartość jest listą "węzłów w zestawie2" . Teraz mapa jest zmienna. Teoretycznie powinienem użyć kopii obronnej do zwrócenia mapy. Ale w tym przypadku jest to naprawdę wymagane? Wygląda na przesadę.Czy kopie obronne należy ZAWSZE robić?
ex:
class BiPartite {
Graph graph;
Map bipartite
Bipartite(graph) {
this.graph = graph;
}
void calcBipartite() {
// calculate map
}
Map getMap() {
// should i make defensive copy ? Appears overkill.
}
}
Jeśli zwracana wartość jest pochodną, która jest obliczana w locie, nie ma potrzeby wykonywania kopii obronnych. Czy obliczasz wartość zwracaną getMap za każdym razem, gdy wywoływana jest metoda? – HariKrishnan
Należy pamiętać, że osoba dzwoniąca ma już zewnętrzny dostęp do wewnętrznych wartości tego obiektu, ponieważ nie kopiuje się 'wykresu ', zakładając, że" Wykres "jest zmienny. – jpmc26