การส่งคืนรายการที่ไม่สามารถแก้ไขได้เป็นความคิดที่ดี แต่รายการที่ทำให้ไม่สามารถแก้ไขได้ในระหว่างการเรียกเมธอด getter ยังสามารถเปลี่ยนได้โดยคลาสหรือคลาสที่ได้รับมาจากคลาส
คุณควรทำให้ชัดเจนกับใครก็ตามที่ขยายคลาสที่ไม่ควรแก้ไขรายการ
ดังนั้นในตัวอย่างของคุณมันอาจนำไปสู่รหัสต่อไปนี้:
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;
}
}
ในตัวอย่างข้างต้นฉันได้กำหนดให้STRINGS
ฟิลด์เป็นสาธารณะโดยหลักการแล้วคุณสามารถยกเลิกการเรียกใช้เมธอดได้เนื่องจากค่าดังกล่าวเป็นที่รู้จักกันแล้ว
คุณสามารถกำหนดสตริงให้กับprivate final List<String>
ฟิลด์ที่ไม่สามารถแก้ไขได้ในระหว่างการสร้างอินสแตนซ์ของคลาส การใช้อาร์กิวเมนต์คงที่หรืออินสแตนซ์ (ของนวกรรมิก) จะขึ้นอยู่กับการออกแบบของคลาส
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
ไม่ป้องกันการแก้ไขของสนาม อย่างไรก็ตามการป้องกันการแก้ไขของObject
ฟิลด์ที่อ้างถึงนั้นมีความซับซ้อนมากขึ้น