จาวางตัวมันเองไม่ใช่ยานกับพวกนี้หมายเหตุประกอบ.
แทนที่จะเป็นยังมีเรื่อง 10 ย่างนั้นสำหรับเจ้าทำงานเข้ากันไม่ต้องใช้ความคิดส่วนใหญ่ซึ่งทำงานอย่างสมบูต่างออกและปรับใช้ต่างออก meanings เพื่ออะไร NonNull
หมายความว่าที่คุณสามารถวางมันและวิธีการทำงานของมัน
[เสียงหอนมาจากคอหอย. นี่เป็นโชคร้ายที่พื้นฐานความคิดของใช้หมายเหตุประกอบเพิ่มข้อมูลนี้เป็น vastly อำนาจเหนือกว่าเป็นตัวเลือกเสริมและช่างจากนั้นมันจะเป็นทั้งหมดถอยหลังได้พูดถึงประเด็นสำคัญและมันไม่ relegate ที่มีอยู่แล้วขึ้นรหัสเข้าไปใน doldrums ของ obsolecence ไม่เหมือ Optional
.
งั้นเจอหนึ่งคุณเหมือนและรวมมันอยู่ในโครงการวิธีเดียวกับคุณรวมถึงมีสามงานปาร์ตี้การขึ้นแก่กัน-ปกติโดยรวมถึงมันในของคุณ Maven/Gradle/มด+ไอวี่/etc(ของคุณสร้างแฟ้มในรายชื่อของ dependencies).
Intellij มีของใช้ใน NonNull และ Nullable. มันอาจจะเป็นคนที่ช่างสะดวกสบายซะจริง มันความคิดเรื่องอะไรพวกนี้หมายเหตุประกอบหมายถึงเป็นต่ำต้อย1. Checker เฟรมเวิร์กก็คือสุดยอดสุริยคราสเป็นห่างออกไปที่สองที่ดีที่สุดแล้วทุกอย่างอื่นอีก(รวมถึง intellij น)ส่วนแบ่งที่สามที่นี้. ที่ดีที่สุดไปคือต้องเป็นพบใน Checker เฟรมเวิร์กหรือเกือบจะไปด้วยดีสุริยคราสนองใช้อยู่พวกนี้หมายเหตุประกอบ. อย่างไรก็ตามฉันสงสัยว่า intellij นโพรโทคอล aimcomment เช็คระบบที่สามารถเต็มความเข้าใจของมันอีกขั้นสูง additions อย่างเช่น @PolyNull
ดังนั้นเพิ่มเติม expressive พลังงานจะเป็นส่วนใหญ่เป็นเรื่องเสียเวลาเปล่า เป็นโบนัส intellij เรือกับกลุ่มของข้อมูลเกี่ยวกับอะไรที่ถูกต้อง nullity หมายเหตุประกอบคงเป็นผู้พันบรรณารักษ์.
นั่นสุดท้ายที่สำคัญคือ:ส่วนใหญ่โดยปรกติจะใช้งานจาวาไลบรารีแบบใช้ร่วมทั้ง java.*
ตัวมันเอง, ไม่มีพวกนี้หมายเหตุประกอบและทำงานกับครึ่งโพรโทคอล aimcomment-annotated รหัสส่วนใหญ่อย่างแน่นอนสูงผิดหวังจริงฝึกซ้อนเป็นเงินของทำอย่างนั้น vastly outweigh งผลประโยชน์ คนเดียวจริงๆคือทางออกไปเป็น'แก้ไขงไลบรารีแบบใช้ร่คุณต้องการใช้งานมันร่วมกับที่ถูกต้อง nullity อมูลแต่จากนี้ไปมันเป็นเรื่องของงานต้องทำเยอะมาก โชคดีที่ intellij ทำลายมันเพื่อคุณ
ฉันคาดหวัง(สุริยคราสนี่มันเกี่ย)นั่นค quickfix(CMD+1 บน macs,CTRL+1 ในคนที่ไม่ใช่ macs อย่างน้อยออกมาจากกล่องถ้าความทรงจำของฉัค่าปริยายของแป้นพิมพ์ปุ่มพิมพ์ลัดสอฉัน)รวมถึงการ'อัตโนมัติเพิ่มสุริยคราสก็เกิดขึ้น nullity หมายเหตุประกอบที่ classpath'(หรือในกรณีของคุณ intellij นแน่นอน). ถ้านั่นคือบางอย่างไม่ปรากฎตัวขึ้น, หน้านี้จากที่ intellij docs อธิบายสิ่งที่จะเพิ่ม org.jetbrains.annotations
ห้องสมุดซึ่งบรรจุก nullity หมายเหตุประกอบของโครงการ. ในความเป็นจริงพวกนี้ docs บ่งบอกว่าจริงที่ quickfix เมนูมีข้อเสนอให้คุณเลือกใช้ตัวเลือกของโดยอัตโนมัติเพิ่มเรื่องสมุดเป็ทางออกของข้อผิดพลาดคุณได้รับของคุณ @NonNull
โหนดของคุณอยู่ในแหล่งข่าวเป็นรหัสมอส
[1]ส่วนใหญ่ต้องอยู่ nullity หมายเหตุประกอบการจำกัดตัวเองค่อนข้างโดยการยินยอมให้หมายเหตุประกอบ annotation tool เดียวบนช่องข้อมูล,วิธีการของ(การจะสื่ออะไรมันจะได้ค่า)และค่าพารามิเตอร์. อย่างไรก็ตามใครต้องเป็นอย่างแน่นอ-ไม่ใช่-โพรโทคอล aimcomment List
ของจะเป็น-โพรโทคอล aimcomment Map
โหซึ่งแผนที่แน่นอนว่าไม่ใช่โพรโทคอล aimcomment String
ที่อาจเป็นโพรโทคอล aimcomment Integer
: @NonNull List<@Nullable Map<@NonNull String, @Nullable Integer>>
. หมายเหตุกำกับของระบบเมอร์ลินมีความสามารถปล่อยให้คุณเขียนเรื่องนั้นแต่อย่างเดียวเท่านั้นถ้าคุณหมายเหตุประกอบเป็นตั้งฝืสำหรับ TYPE_USE. checker เฟรมเวิร์กและสุริยคราสก็เกิดขึ้น nullity หมายเหตุประกอบงานแบบนั้นส่วนใหญ่คนอื่นทำไม่ได้และเป็นเพราะฉะนั้นน้อยลง expressive. CheckerFramework นก็จะเป็นก้าวต่อไปและจะอนุญาตให้คุณเขียนกซึ้งของเหมือนกั nullity ไม่เป็นไร'. เหมือน generics มี 3 แบบฟอร์ม(List<Integer>
แล้ว List<? super Integer>
แล้ว List< extends Integer>
ครั้งนึง generics เป็นที่เกี่ยวข้อง 2 nullities(เหมือนกันไม่เคยโพรโทคอล aimcomment หรือแน่นอนคือโพรโทคอล aimcomment ได้รับอนุญาต)ไม่เพียงพอที่คุณต้องการมากก nullities. checker เฟรมเวิร์กได้ @PolyNull
จะปล่อยให้คุณเชื่อมโยง nullities:คุณสามารถตัวอย่างเช่นเขียนวิธีการอยู่ใน checkerframework แต่คุณไม่สามารถเป็นไปได้เขียนมันเหมาะสมพิมพ์กับ intellij นหรือสำหรับเรื่องสุริยคราสก็เกิดขึ้น:
public void duplicateFirstMatch(List<T> elems, Predicate<T> matcher);
ที่ไหนความคิดคือ:ส่วนนี้วิธีการเป็นตัวการ matcher นความผิดของกันและธาตุในช่องรายการและตอเรียตรงกับว่าอีลีเมนต์คือกเพิ่มเข้ากับจุดจบของรายการ นี่วิธีการทำงานหาก T
ถือว่าเป็น'@NonNull'(โดยที่ไม่มี nulls ยู่ในโพรโทคอล aimcomment นไม่สามารถถูกเพิ่มเข้าไปโดยรหัสดังนั้นที่ไม่ nullity ของส่วนประกอบไม่สามารถถูกทารุณโดยมัน)แต่มันทำงานอย่างดีหาก T
นี่ @Nullable
ถ้าค matcher ยัง @Nullable T
แน่นอน:นี่คือรหัสอาจจะเพิ่มโพรโทคอล aimcomment ไปยังรายการแต่นั่นก็โอเค
ดังนั้น T
คือก็เหมือนกั Nullable หรือ NonNull แต่ Ts พูดถึงอยู่ในลายเซ็นต้องตรงกับของพวกเขา nullities. @PolyNull
แก้ปัญหานี้