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

เมธอดและคลาสเจเนอริก

กำหนดคลาสเจเนอริกด้วยพารามิเตอร์ชนิดข้อมูล และเขียนเมธอดเจเนอริกโดยวาง <T> ไว้ก่อนชนิดค่าที่ส่งคืน เรียนรู้ว่าการอนุมานชนิดช่วยได้ที่ใด

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

ภาพรวม

คลาสเจเนอริก ช่วยนำการออกแบบเดียวกลับมาใช้กับหลายชนิดข้อมูล และ เมธอดเจเนอริก ทำงานกับพารามิเตอร์ชนิดข้อมูลได้ แม้อยู่ภายในคลาสที่ไม่ใช่เจเนอริก เราจะสร้าง Pair<T,U> ขนาดเล็ก เมธอด swap และโรงงานแบบสแตติก

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

เหตุใดจึงทำให้คลาสเป็นเจเนอริก

  • การออกแบบเดียว หลายชนิดข้อมูล: ลดการเขียนโค้ดซ้ำ
  • ความปลอดภัยด้านชนิดข้อมูล: ตรวจพบชนิดข้อมูลที่ไม่ถูกต้องขณะคอมไพล์
  • ส่วนติดต่อการใช้งานที่สะอาด: ไม่ต้องแปลงชนิดข้อมูลเมื่อส่งค่ากลับ

โค้ด: Pair<T,U>

Pair<T,U> ช่วยให้ใช้คลาสเดียวกับชนิดข้อมูลสองชนิดที่แตกต่างกัน ไม่ต้องแปลงชนิดข้อมูล และส่วนติดต่อการใช้งานก็ชัดเจน

public class Main {
  // Simple generic data holder with two type parameters
  static class Pair<T, U> {
    private final T first;
    private final U second;
    Pair(T first, U second) { this.first = first; this.second = second; }
    T first() { return first; }
    U second() { return second; }
    public String toString() { return "Pair(" + first + ", " + second + ")"; }
  }

  public static void main(String[] args) {
    Pair<String, Integer> p = new Pair<>("age", 21);
    System.out.println(p);
    System.out.println(p.first() + " -> " + p.second());
  }
}

เมธอดเจเนอริก: ลายเซ็น

เมธอดเจเนอริกทำงานได้โดยไม่ขึ้นกับว่าคลาสนั้นเป็นเจเนอริกหรือไม่ ลายเซ็นคือ: <T> returnType... ตัวอย่าง: <T> T firstOrDefault(T[] arr, T def)

โค้ด: swap แบบเจเนอริก

<T> ถูกกำหนดในระดับเมธอด จึงทำงานกับอาร์เรย์หลายชนิดได้ ขณะเรียกใช้เราไม่จำเป็นต้องระบุชนิดข้อมูล เพราะคอมไพเลอร์อนุมานให้

public class Main {
  // Generic utility method: swap two indices of an array of any reference type
  static <T> void swap(T[] arr, int i, int j) {
    T tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
  }

  public static void main(String[] args) {
    String[] names = { "Ada", "Bob", "Cyd" };
    swap(names, 0, 2); // works with String[]
    for (int k = 0; k < names.length; k = k + 1) {
      System.out.print(names[k] + (k < names.length - 1 ? " " : "\n"));
    }
  }
}

โค้ด: โรงงานเจเนอริกแบบสแตติก

โรงงานเจเนอริกแบบสแตติก: เมื่อเรียกใช้ of(T v) ระบบจะอนุมานชนิดข้อมูลให้ ทำให้รูปแบบการใช้งานสะอาดและอ่านง่าย

public class Main {
  static class Box<T> {
    private final T value;
    private Box(T v) { this.value = v; }
    public T get() { return value; }
    // Static generic factory method inside a generic class
    public static <T> Box<T> of(T v) { return new Box<T>(v); }
  }

  public static void main(String[] args) {
    // Type inferred by diamond and method generic parameter
    Box<Integer> bi = Box.of(42);
    Box<String> bs = Box.of("hi");
    System.out.println(bi.get() + 1);
    System.out.println(bs.get().toUpperCase());
  }
}

แบบฝึกตรวจสอบเมธอดเจเนอริก

ตรวจสอบอย่างรวดเร็ว: จะประกาศเมธอดเจเนอริกอย่างถูกต้องได้อย่างไร

ทบทวน

ทบทวน: คลาสเจเนอริก (Pair<T,U>) ช่วยลดโค้ดซ้ำ ส่วนเมธอดเจเนอริก (ลายเซ็น <T>) ทำงานได้โดยไม่ขึ้นกับคลาส การอนุมานชนิดข้อมูลช่วยให้การเรียกใช้กระชับขึ้น

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

บทเรียน “เมธอดและคลาสเจเนอริก” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “เมธอดและคลาสเจเนอริก”

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

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

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

บทเรียน “เมธอดและคลาสเจเนอริก” ใช้เวลานานแค่ไหน

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

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

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

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

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