ทำไมไม่@NotNull หรื@Nullable มีตัวตนของฉันอยู่ในโครงการนี้เหรอ?

0

คำถาม

ฉันตั้งโปรแกรมกับ IntelliJ และฉันกำลังทำงานกับโครงการของจาวาและผมต้องการจะทำให้เป็นพารามิเตอร์ annotated เป็ @NotNull. แต่ IntelliJ บอกว่ามันไม่มีตัวตน ฉันตรวจสอบทั้งหมดของจาวาแฟ้มและมันไม่ได้อยู่ในโครงการของฉัน. ฉันสับสนและฉันไม่ได้ใช้ maven หรือ gradle แค่ค่าปริยายของจาวางโครงการ. ฉันไม่รู้ว่าเกิดอะไรขึ้น

นี่เป็นตัวอย่าง:

package com.company;


    public class Main {
         public static void main(String[] args){
                testF(null);
         }
         public static void testF (@NotNull Integer... numbers){
            for(Integer integer: numbers){
                   System.out.println(integer);
          }
     }
}

เกิดข้อผิดพลาดเข้ามาบอกว่า"ไม่สามารถแก้ไขสัญลักษณ์ NotNul:10"(อีกครั้ง@ต่อหน้า)

annotations intellij-idea java
2021-11-22 22:38:50
1

คำตอบที่ดีที่สุด

0

จาวางตัวมันเองไม่ใช่ยานกับพวกนี้หมายเหตุประกอบ.

แทนที่จะเป็นยังมีเรื่อง 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 แก้ปัญหานี้

2021-11-22 22:56:48

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่