เมธอดและคลาสเจเนอริก
กำหนดคลาสเจเนอริกด้วยพารามิเตอร์ชนิดข้อมูล และเขียนเมธอดเจเนอริกโดยวาง <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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อินเทอร์เฟซในทางปฏิบัติ
- พื้นฐานเจเนอิกส์ (T และการอนุมานชนิด)
- เมธอดและคลาสเจเนอริก