ฉัน googled หัวข้อนี้ แต่นอกจากWikipediaแล้วฉันไม่พบเอกสารหรือบทความที่เป็นประโยชน์เพิ่มเติม
ใครช่วยอธิบายให้ฉันเข้าใจด้วยคำง่ายๆว่ามันหมายถึงอะไรหรือแนะนำให้ฉันดูเอกสารที่ดีและเข้าใจง่าย
ฉัน googled หัวข้อนี้ แต่นอกจากWikipediaแล้วฉันไม่พบเอกสารหรือบทความที่เป็นประโยชน์เพิ่มเติม
ใครช่วยอธิบายให้ฉันเข้าใจด้วยคำง่ายๆว่ามันหมายถึงอะไรหรือแนะนำให้ฉันดูเอกสารที่ดีและเข้าใจง่าย
คำตอบ:
มันไม่ได้มีความหมายอะไรโดยเฉพาะในการอ้างอิงถึง java
คลาสคงที่เป็นเพียงคุณสมบัติที่เก็บอินสแตนซ์ทั้งหมดของคลาสเสมอไม่ว่าโค้ดอื่นจะทำอะไรก็ตาม
ตัวอย่างเช่น,
class X {
final Y y = new Y();
}
X มีค่าคงที่ระดับว่ามีy
ทรัพย์สินและมันจะไม่และมีค่าของชนิดnull
Y
class Counter {
private int x;
public int count() { return x++; }
}
ล้มเหลวในการรักษาค่าคงที่ที่สำคัญสองตัว
count
ไม่ส่งคืนค่าลบเนื่องจากอาจมีการไหลน้อยเกินไปcount
เพิ่มขึ้นอย่างซ้ำซากจำเจคลาสที่แก้ไขจะรักษาค่าคงที่ทั้งสองไว้
class Counter {
private int x;
public synchronized int count() {
if (x == Integer.MAX_VALUE) { throw new IllegalStateException(); }
return x++;
}
}
แต่ล้มเหลวในการรักษาค่าคงที่ที่เรียกให้count
ประสบความสำเร็จตามปกติ (ไม่มีการละเมิด TCB † ) เนื่องจากcount
อาจทำให้เกิดข้อยกเว้นหรืออาจบล็อกหากเธรดที่หยุดชะงักเป็นเจ้าของจอภาพของตัวนับ
แต่ละภาษาที่มีคลาสทำให้ง่ายต่อการรักษาค่าคงที่ของคลาส แต่ไม่ใช่ภาษาอื่น Java ไม่มีข้อยกเว้น:
private
ฟิลด์ของตนได้ดังนั้นค่าคงที่ที่อาศัยข้อมูลส่วนตัวจึงดูแลรักษาได้ง่ายnull
ค่าสามารถแอบได้หลายวิธีดังนั้นจึงเป็นเรื่องยากที่จะรักษาค่าคงที่ "มีค่าจริง"† - การละเมิดภายนอกหรือTCBคือเหตุการณ์ที่ผู้ออกแบบระบบมองโลกในแง่ดีว่าจะไม่เกิดขึ้น
โดยทั่วไปเราเชื่อว่าฮาร์ดแวร์พื้นฐานทำงานได้ตามที่โฆษณาเมื่อพูดถึงคุณสมบัติของภาษาระดับสูงที่สร้างขึ้นจากภาษาเหล่านี้และข้อโต้แย้งของเราที่มีค่าคงที่ไม่ได้คำนึงถึงความเป็นไปได้ของ:
setAccessible
เพื่อแก้ไขprivate
ตารางการค้นหาสำหรับบางระบบ TCB ของเราอาจรวมเฉพาะบางส่วนของระบบดังนั้นเราจึงไม่สามารถสรุปได้
แต่เราอาจสันนิษฐานได้ว่า
ยิ่งระบบระดับสูง TCB มักจะมีขนาดใหญ่ขึ้น แต่สิ่งที่ไม่น่าเชื่อถือมากขึ้นคุณสามารถออกจาก TCB ของคุณได้มากเท่าไหร่ก็จะยิ่งมีโอกาสที่ค่าคงที่ของคุณจะคงอยู่ได้มากขึ้นเท่านั้น
count
ไม่เคยส่งกลับค่าเดิมซ้ำสอง" ถือว่าคลาสไม่แปรผันจริงหรือ
Invariant หมายถึงสิ่งที่ควรเป็นไปตามเงื่อนไขไม่ว่าจะเปลี่ยนแปลงอะไรก็ตามหรือใครก็ตามที่ใช้ / เปลี่ยนแปลง กล่าวคือคุณสมบัติของคลาสหนึ่ง ๆ จะตอบสนองหรือเป็นไปตามเงื่อนไขบางอย่างได้เสมอแม้ว่าจะผ่านการเปลี่ยนแปลงโดยใช้วิธีการสาธารณะก็ตาม ดังนั้นไคลเอนต์หรือผู้ใช้ของคลาสนี้จึงมั่นใจเกี่ยวกับคลาสและคุณสมบัติ
ตัวอย่างเช่น,
เป็นข้อเท็จจริงที่ต้องเป็นจริงเกี่ยวกับคลาสอินสแตนซ์ ตัวอย่างเช่นถ้าคลาสมีคุณสมบัติ X และค่าคงที่สามารถเป็น X ต้องมากกว่า 0 สำหรับความรู้ของฉันไม่มีวิธีการในตัวในการรักษาค่าคงที่คุณต้องทำให้คุณสมบัติเป็นส่วนตัวและตรวจสอบให้แน่ใจว่า getters และ setters ของคุณบังคับใช้คุณสมบัติที่ไม่แปรเปลี่ยน
มีคำอธิบายประกอบที่สามารถตรวจสอบคุณสมบัติโดยใช้การสะท้อนและตัวสกัดกั้น http://docs.oracle.com/javaee/7/api/javax/validation/constraints/package-summary.html