Değiştirilemez bir listenin geri gönderilmesi iyi bir fikirdir. Ancak, getter yöntemine yapılan çağrı sırasında değiştirilemeyen bir liste yine de sınıf veya sınıftan türetilen sınıflar tarafından değiştirilebilir.
Bunun yerine, sınıfı genişleten herkesin listenin değiştirilmemesi gerektiğini açıkça belirtmelisiniz.
Yani örneğinizde aşağıdaki koda yol açabilir:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
public static final List<String> STRINGS =
Collections.unmodifiableList(
Arrays.asList("1", "2"));
public final List<String> getStrings() {
return STRINGS;
}
}
Yukarıdaki örnekte STRINGS
alanı herkese açık , prensip olarak, değerler zaten bilindiği için yöntem çağrısını ortadan kaldırabilirsiniz.
Ayrıca dizeleri bir private final List<String>
, sınıf örneğinin oluşturulması sırasında değiştirilemez hale alana . Sabit veya örnekleme bağımsız değişkenlerinin kullanılması (yapıcıdan) sınıfın tasarımına bağlıdır.
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
private final List<String> strings;
public Test(final String ... strings) {
this.strings = Collections.unmodifiableList(Arrays
.asList(strings));
}
public final List<String> getStrings() {
return strings;
}
}
final
yaptığı alanın değişiklik yapılmasını önlemek . Bununla birlikte,Object
atıfta bulunulan alanın değiştirilmesini önlemek daha karmaşıktır.