Java Academy · บทเรียน

พื้นฐานเจเนอิกส์ (T และการอนุมานชนิด)

เรียนรู้พารามิเตอร์ชนิดเจเนอริก T เหตุผลที่ช่วยให้ปลอดภัยตั้งแต่เวลาคอมไพล์ และวิธีที่ตัวดำเนินการ diamond อนุมานชนิดข้อมูล

บทเรียน 2 จาก 38 ขั้นตอน

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

เหตุใดจึงต้องใช้เจเนอริก

เจเนอริก เพิ่มชนิดข้อมูลให้กับคอนเทนเนอร์และเครื่องมือ เพื่อให้คอมไพเลอร์ช่วยป้องกันข้อผิดพลาด ประโยชน์มีดังนี้:

  • ความปลอดภัยด้านชนิดข้อมูล — ไม่ผสมชนิดข้อมูลโดยไม่ตั้งใจ
  • ไม่ต้องแปลงชนิด — โค้ดอ่านง่ายขึ้น
  • นำกลับมาใช้ซ้ำได้ — คลาสเดียวใช้งานได้กับหลายชนิดข้อมูล

T คืออะไร

T (พารามิเตอร์ชนิดข้อมูล) เป็นตัวแทนของชนิดข้อมูลจริง เมื่อเขียน Box<String> คอมไพเลอร์จะถือว่า T เป็น String ภายในการใช้งานนั้น

โค้ด: Box<T>

Box<T>: เมื่อแทน T ด้วย String จะยอมรับเฉพาะ String เท่านั้น ชนิดข้อมูลที่ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาดขณะคอมไพล์ จึงไม่เกิดปัญหาที่คาดไม่ถึงขณะทำงาน

public class Main {
  // A tiny generic container
  static class Box<T> {
    private T value;
    void set(T v) { value = v; }
    T get() { return value; }
  }

  public static void main(String[] args) {
    Box<String> bs = new Box<String>(); // T becomes String
    bs.set("hello");
    System.out.println(bs.get());       // no cast needed

    // Box<Integer> bi = new Box<Integer>();
    // bi.set("oops"); // would not compile: String is not Integer
  }
}

โค้ด: การอนุมานชนิดด้วยเครื่องหมายเพชร

<> (เครื่องหมายเพชร) ช่วยให้คอมไพเลอร์อนุมานชนิดข้อมูลจากด้านขวา หากไม่สอดคล้องกับชนิดข้อมูลด้านซ้าย โค้ดจะคอมไพล์ไม่ผ่าน จึงช่วยเพิ่มความปลอดภัย

public class Main {
  static class Box<T> {
    private T value;
    Box() {}
    Box(T v) { value = v; }
    T get() { return value; }
  }

  public static void main(String[] args) {
    // Type on the left, diamond on the right — compiler infers T
    Box<Integer> a = new Box<>(123);
    Box<String> b = new Box<>("hi");

    System.out.println(a.get() + 1);    // 124
    System.out.println(b.get().toUpperCase());
  }
}

พารามิเตอร์ชนิดข้อมูลที่มีขอบเขต

ขอบเขต: เมธอดเจเนอริกบางรายการต้องการความสามารถอย่าง Comparable ตัวอย่างเช่น <T extends Comparable<T>> หมายความว่า T ต้องสามารถนำมาเปรียบเทียบได้

โค้ด: เมธอดเจเนอริกที่มีขอบเขต

เมธอดเจเนอริก: <T extends Comparable<T>> ชนิด Integer และ String ใช้งานร่วมกันได้ เพราะทั้งสองชนิดใช้อินเทอร์เฟซ Comparable

public class Main {
  // Generic method: works for any Comparable type
  static <T extends Comparable<T>> T min(T a, T b) {
    return (a.compareTo(b) <= 0) ? a : b;
  }

  public static void main(String[] args) {
    System.out.println(min(3, 7));              // Integer
    System.out.println(min("apple", "banana")); // String (lexicographic)
  }
}

แบบฝึกตรวจสอบพื้นฐานเจเนอริก

ตรวจสอบอย่างรวดเร็ว: ประโยชน์หลักของการใช้เจเนอริกอย่าง Box<String> คืออะไร

ทบทวน

ทบทวน: T เป็นตัวแทนของชนิดข้อมูล และเครื่องหมายเพชรช่วยอนุมานชนิดข้อมูล เราใช้ขอบเขต (extends Comparable) เพื่อทำให้เมธอดเจเนอริกปลอดภัยและมีประสิทธิภาพยิ่งขึ้น

เริ่มต้นได้ฟรี

เรียนรู้ Java ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
104
บทเรียน
374

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

บทเรียน “พื้นฐานเจเนอิกส์ (T และการอนุมานชนิด)” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐานเจเนอิกส์ (T และการอนุมานชนิด)”

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

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

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

บทเรียน “พื้นฐานเจเนอิกส์ (T และการอนุมานชนิด)” ใช้เวลานานแค่ไหน

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

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

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

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

  1. อินเทอร์เฟซในทางปฏิบัติ
  2. พื้นฐานเจเนอิกส์ (T และการอนุมานชนิด)
  3. เมธอดและคลาสเจเนอริก
← กลับไปที่ Java Academy