Ludzie,Java - Clone właściwość wewnątrz metody pochłaniacza
ja jechałem przez najlepszych praktyk kodowania Javy wymienionych tutaj
http://viralpatel.net/blogs/most-useful-java-best-practice-quotes-java-developers/
2-ty cytat mówi
Cytat 2: Nigdy nie dokona przykładowe pola klasy publicznej
Zgadzam się, że to absolutnie poprawne, ale utknąłem za zaleceniem pisarza kilka linii poniżej tego cytatu.
Mówi
private String[] weekdays =
{"Sun", "Mon", "Tue", "Thu", "Fri", "Sat", "Sun"};
public String[] getWeekdays() {
return weekdays;
}
Ale pisząc metodę getter nie dokładnie rozwiązać nasz problem. Tablica jest nadal dostępna. Najlepszym sposobem uczynienia go niezmodyfikowanym jest zwrócenie klona tablicy zamiast samej tablicy. Zatem metoda getter zostanie zmieniony na
public String[] getWeekdays() {
return weekdays.clone();
}
nigdy nie używane clone()
się wewnątrz każdej metody pochłaniacza klasy Javy.
Zastanawiam (jak jest ona wymieniona jako jedna z dobrych praktyk) - dlaczego jeden should use
/shouldn't use
clone()
wewnątrz metody getter? i w jakich scenariuszach?
Czy to może być dobra praktyka kodowania dla Javy?
Dzięki
IMO - Dla obiektów niezmiennych i typów danych pierwotnych klon nie jest wymagany. Jeśli chcemy, aby nasze dane były bezpieczne, musimy zwrócić kopię klonu, a nie oryginał. –
Możesz zwrócić 'Arrays.asList (daysdays)', który będzie niezmienny. – Jivings
@Jivings not true. Lista nie przyjmuje nowych elementów, ale metody set() działają. –