0Pricing
Java Academy · บทเรียน

การกำหนดคำอธิบายประกอบ: องค์ประกอบและค่าเริ่มต้น

สร้างคำอธิบายประกอบแบบกำหนดเองด้วย @interface กำหนดองค์ประกอบพร้อมค่าเริ่มต้น และใช้คำอธิบายประกอบระดับเมตา

การกำหนดคำอธิบายประกอบ: องค์ประกอบและค่าเริ่มต้น เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

แอนโนเทชันคืออะไร

แอนโนเทชันคือเมทาดาทาที่นำไปใช้กับคลาส เมธอด ฟิลด์ หรือพารามิเตอร์ แอนโนเทชันไม่ได้เปลี่ยนพฤติกรรมโดยตรง แต่ให้ข้อมูลแก่คอมไพเลอร์ เฟรมเวิร์ก หรือตัวประมวลผลขณะรันไทม์

การประกาศแอนโนเทชันด้วย @interface

ใช้ @interface เพื่อประกาศแอนโนเทชันแบบกำหนดเอง องค์ประกอบมีลักษณะเหมือนเมธอด โดยระบุค่าเริ่มต้นด้วย default

@interface Retry {
    int times()      default 3;
    long delayMs()   default 1000L;
    Class<? extends Throwable>[] on() default {Exception.class};
}

การนำแอนโนเทชันไปใช้

นำแอนโนเทชันไปใช้กับเป้าหมาย โดยไม่ต้องระบุองค์ประกอบที่มีค่าเริ่มต้น หากมีการตั้งชื่อองค์ประกอบเพียงรายการเดียวเป็น value ก็สามารถกำหนดค่าโดยไม่ต้องระบุชื่อคีย์ได้

@Retry(times = 5, delayMs = 500)
public void callExternalService() { ... }

// Single-element shorthand:
@interface Label { String value(); }
@Label("production")
public class App {}

ชนิดขององค์ประกอบในแอนโนเทชัน

องค์ประกอบสามารถเป็นได้เฉพาะชนิดพื้นฐาน (int, long และอื่น ๆ), String, Class, enum, ชนิดแอนโนเทชันอีกชนิดหนึ่ง หรืออาร์เรย์มิติเดียวของชนิดข้างต้น

@interface Config {
    String   host();
    int      port()      default 8080;
    LogLevel level()     default LogLevel.INFO;  // enum
    Class<?> handler()   default DefaultHandler.class;
    String[] tags()      default {};
}

เมทาแอนโนเทชัน: @Retention

@Retention ควบคุมว่าแอนโนเทชันจะถูกเก็บไว้นานเพียงใด: SOURCE (คอมไพเลอร์ทิ้งไป), CLASS (อยู่ใน .class แต่ไม่อยู่ขณะรันไทม์), RUNTIME (อ่านได้ผ่านรีเฟล็กชัน)

@Retention(RetentionPolicy.RUNTIME)
@interface Retry {
    int times() default 3;
}

เมทาแอนโนเทชัน: @Target

@Target จำกัดตำแหน่งที่สามารถนำแอนโนเทชันไปใช้ได้ และสามารถระบุเป้าหมายหลายรายการได้

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Audited {
    String description() default "";
}

@Documented และ @Inherited

@Documented จะรวมแอนโนเทชันไว้ใน Javadoc ส่วน @Inherited อนุญาตให้คลาสย่อยสืบทอดแอนโนเทชันจากคลาสแม่ได้ (ใช้ได้เฉพาะกับแอนโนเทชันระดับคลาส)

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Category {
    String value();
}

แอนโนเทชันแบบ @Repeatable

กำกับแอนโนเทชันด้วย @Repeatable เพื่อให้ปรากฏซ้ำหลายครั้งบนองค์ประกอบเดียวกัน และจัดเตรียมแอนโนเทชันตัวเก็บที่มีอาร์เรย์ไว้ภายใน

@Repeatable(Tags.class)
@interface Tag { String value(); }
@interface Tags { Tag[] value(); }

@Tag("fast")
@Tag("stable")
public class Service {}

ค่าเริ่มต้นและการละเว้นองค์ประกอบ

ไม่จำเป็นต้องระบุองค์ประกอบที่มีค่า default ณ จุดเรียกใช้ ส่วนองค์ประกอบที่ไม่มีค่าเริ่มต้นเป็นสิ่งที่ต้องระบุ

@Retry                  // uses defaults: times=3, delayMs=1000
public void action1() {}
@Retry(times=1)         // overrides only times; delayMs stays 1000
public void action2() {}

แอนโนเทชันกับอินเทอร์เฟซเครื่องหมาย

อินเทอร์เฟซเครื่องหมาย (เช่น Serializable) ตรวจสอบด้วย instanceof และสื่อข้อมูลชนิด ส่วนแอนโนเทชันมีความยืดหยุ่นมากกว่า เพราะเก็บเมทาดาทาและมีองค์ประกอบได้

แอนโนเทชันในตัวที่ใช้บ่อย

ควรรู้จักแอนโนเทชันของ JDK ได้แก่ @Override, @Deprecated, @FunctionalInterface, @SuppressWarnings และ @SafeVarargs

@Override
public String toString() { return "User{" + name + "}"; }
@Deprecated(since = "2.0", forRemoval = true)
public void oldMethod() {}

ตรวจสอบความเข้าใจ

นโยบายการเก็บรักษาเพียงรายการเดียวที่ทำให้สามารถอ่านแอนโนเทชันขณะรันไทม์ได้คือรายการใด

สรุปทบทวน

ประกาศแอนโนเทชันด้วย @interface ใช้ @Retention(RUNTIME) สำหรับการประมวลผลด้วยรีเฟล็กชัน ใช้ @Target เพื่อจำกัดการใช้งาน และใช้ default สำหรับองค์ประกอบที่ไม่จำเป็นต้องระบุ ส่วน @Repeatable ช่วยให้สามารถซ้อนแอนโนเทชันหลายรายการได้

คำถามที่พบบ่อย

บทเรียน “การกำหนดคำอธิบายประกอบ: องค์ประกอบและค่าเริ่มต้น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดคำอธิบายประกอบ: องค์ประกอบและค่าเริ่มต้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดคำอธิบายประกอบ: องค์ประกอบและค่าเริ่มต้น”

สร้างคำอธิบายประกอบแบบกำหนดเองด้วย @interface กำหนดองค์ประกอบพร้อมค่าเริ่มต้น และใช้คำอธิบายประกอบระดับเมตา คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดคำอธิบายประกอบ: องค์ประกอบและค่าเริ่มต้น” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดคำอธิบายประกอบ: องค์ประกอบและค่าเริ่มต้น
  2. นโยบายการคงอยู่และชนิดเป้าหมาย
  3. การประมวลผลคำอธิบายประกอบขณะทำงาน
  4. ตัวประมวลผลคำอธิบายประกอบขณะคอมไพล์
← กลับไปที่ Java Academy