ใน Java, the “ ClassCastException ” ช่วยในการระบุปัญหาความเข้ากันได้ของประเภท ณ รันไทม์ โดยอนุญาตให้นักพัฒนาสามารถตรวจจับได้ตั้งแต่เนิ่นๆ ในขั้นตอนการพัฒนา นอกจากนี้ยังรับประกันความปลอดภัยของประเภท ป้องกันความไม่สอดคล้องกันในโปรแกรม ClassCastException ช่วยได้มากในขั้นตอนการดีบัก การทดสอบ การแคสต์ประเภทที่ถูกต้อง ฯลฯ
คู่มือนี้สาธิตขั้นตอนการแก้ไข ClassCastException ใน Java
ClassCastException เกิดขึ้นใน Java ได้อย่างไร
“ ClassCastException ” รับรองการหล่อประเภทที่เหมาะสมและป้องกันข้อผิดพลาดรันไทม์ที่เกิดจากการแปลงประเภทที่เข้ากันไม่ได้ พูดง่ายๆ ก็คือ ข้อยกเว้นนี้จะเกิดขึ้นเมื่อมีการพยายามส่งวัตถุไปยังประเภทที่เข้ากันไม่ได้
ตัวอย่างเช่น ไปที่โค้ดด้านล่างเกี่ยวกับ “ ClassCastException ” ในจาวา:
นำเข้า java.io.* ;
นำเข้า java.lang.* ;
นำเข้า java.util.* ;
ระดับ คำแนะนำลินุกซ์ {
// การสร้างคลาสไดรเวอร์
สาธารณะ คงที่ เป็นโมฆะ หลัก ( สตริง [ ] หาเรื่อง )
{
พยายาม {
วัตถุ พ่อแม่ = ใหม่ วัตถุ ( ) ;
สตริง เด็ก = ( สตริง ) พ่อแม่ ;
ระบบ . ออก . พิมพ์ ( เด็ก ) ;
}
จับ ( ข้อยกเว้น ฉ ) {
ระบบ . ออก . พิมพ์ ( ฉ ) ;
}
}
}
คำอธิบายของรหัสด้านบน:
- ใน ' พยายาม ” บล็อก ตัวอย่างของวัตถุ “ พ่อแม่ ” ถูกประกาศโดยใช้ “ ใหม่ ' คำสำคัญ.
- หลังจากนั้นจึงใช้การเรียงพิมพ์โดยที่ “ วัตถุ ” เป็นแบบ typecast และมีชื่อเป็น “ เด็ก '.
- Typecasting นี้ละเมิดกฎที่ว่าคลาสพาเรนต์จะต้องไม่เป็น typecast กับคลาสย่อย นั่นคือเหตุผลที่ข้อยกเว้นเกิดขึ้นเนื่องจาก ' วัตถุ ” ประเภทคือคลาสพาเรนต์
- ในที่สุด “ จับ ” บล็อกใช้ที่รับ “ ข้อยกเว้น ” เป็นพารามิเตอร์และพิมพ์ข้อความบนคอนโซล
หลังจากสิ้นสุดขั้นตอนการดำเนินการ:
ภาพรวมด้านบนแสดงการเกิดขึ้นของ ClassCastException ใน Java
วิธีแก้ไข ClassCastException ใน Java
มีการใช้วิธีแก้ปัญหาที่เป็นไปได้สามวิธีที่นักพัฒนาสามารถแก้ไขหรือหลีกเลี่ยงโอกาสที่จะเพิ่ม ' ClassCastException ” ในภาษาจาวา
โซลูชันเหล่านี้อธิบายแยกกันด้านล่าง:
โซลูชันที่ 1: การใช้ตัวดำเนินการ 'instanceof'
“ ตัวอย่าง ” โอเปอเรเตอร์ตรวจสอบว่า “ วัตถุ ” เป็นอินสแตนซ์ประเภทที่ต้องการหรือไม่ การตรวจสอบนี้ช่วยป้องกันการเกิด “ ClassCastException '. ตัวอย่างเช่น ไปที่บล็อกรหัสด้านล่าง:
สาธารณะ ระดับ TypeCheckingLinuxHint {สาธารณะ คงที่ เป็นโมฆะ หลัก ( สตริง [ ] หาเรื่อง ) {
วัตถุ พ่อแม่ = 'ครอบครัว Linux Hint' ;
ถ้า ( พ่อแม่ ตัวอย่าง สตริง ) {
สตริง เด็ก = ( สตริง ) พ่อแม่ ;
ระบบ . ออก . พิมพ์ ( 'หลังจากพิมพ์ข้อความสตริง: ' + เด็ก ) ;
} อื่น {
ระบบ . ออก . พิมพ์ ( 'วัตถุเป็นตัวอย่างของประเภทสตริงที่ต้องการ' ) ;
}
}
}
คำอธิบายของรหัสด้านบน:
- ประการแรก “ พ่อแม่ ” วัตถุถูกสร้างขึ้นซึ่งเริ่มต้นด้วยค่าจำลองภายใน “ พยายาม ' ปิดกั้น.
- จากนั้นใช้ 'ถ้า' คำสั่งที่ “ ตัวอย่าง ” ตัวดำเนินการใช้เพื่อตรวจสอบอินสแตนซ์ของ “ พ่อแม่ ” วัตถุที่ต้องการ “ สตริง ' พิมพ์.
- ต่อไป ถ้าเงื่อนไขกลับมา “ จริง ” การพิมพ์จะดำเนินการและแสดงบนคอนโซล
- มิฉะนั้น ข้อความแสดงข้อผิดพลาดที่กำหนดเองจะแสดงบนคอนโซล
หลังจากสิ้นสุดขั้นตอนการดำเนินการ:
ภาพรวมแสดงให้เห็นว่าการ typecasting เสร็จสิ้นและ ClassCastException ได้รับการแก้ไขโดยใช้ ' ตัวอย่าง ” โอเปอเรเตอร์
แนวทางที่ 2: ตรวจสอบและแก้ไขการดำเนินการพิมพ์ดีด
วิธีแก้ไขอีกวิธีหนึ่งคือการตรวจสอบโค้ดหลายๆ ครั้งและตรวจสอบประเภทที่เข้ากันได้สำหรับการพิมพ์ ตัวอย่างเช่น เข้าไปที่โค้ดด้านล่างซึ่งมีเครื่องหมาย “ ClassCastException ” ถูกจับเนื่องจากประเภทที่ต้องการสำหรับการพิมพ์ไม่เข้ากัน:
สาธารณะ ระดับ ประเภทCheckLinuxHint {สาธารณะ คงที่ เป็นโมฆะ หลัก ( สตริง [ ] หาเรื่อง ) {
วัตถุ พ่อแม่ = 'ครอบครัว Linux Hint' ;
จำนวนเต็ม แปลงจำนวน = ( จำนวนเต็ม ) พ่อแม่ ;
ระบบ . ออก . พิมพ์ ( 'หมายเลขหลังจากพิมพ์: ' + แปลงจำนวน ) ;
}
}
ในโค้ดข้างต้น โปรแกรมเมอร์โยน ' สตริง ' ถึง ' จำนวนเต็ม '.
หลังจากสิ้นสุดขั้นตอนการรวบรวม:
ภาพรวมด้านบนแสดงการเกิดขึ้นของ ClassCastException
แนวทางที่ 3: การใช้ Generics
โปรแกรมเมอร์สามารถใช้ “ ยาชื่อสามัญ ” เพื่อระบุประเภทที่คาดหวังและบังคับใช้ความปลอดภัยของประเภท ณ เวลารวบรวม
ตัวอย่างเช่น ไปที่รหัสด้านล่าง:
นำเข้า java.util.ArrayList ;นำเข้า java.util.List ;
สาธารณะ ระดับ ใช้ Generics {
สาธารณะ คงที่ เป็นโมฆะ หลัก ( สตริง [ ] หาเรื่อง ) {
รายการ < สตริง > empName = ใหม่ รายการอาร์เรย์ <> ( ) ;
empName. เพิ่ม ( 'แฮร์รี่' ) ;
empName. เพิ่ม ( 'พอตเตอร์' ) ;
สตริง อักษรย่อ = empName. รับ ( 0 ) ;
สตริง สุดท้าย = empName. รับ ( 1 ) ;
ระบบ . ออก . พิมพ์ ( 'ชื่อจริง: ' + อักษรย่อ ) ;
ระบบ . ออก . พิมพ์ ( 'ชื่อที่สอง: ' + สุดท้าย ) ;
}
}
คำอธิบายของรหัสด้านบน:
- อันดับแรก ยูทิลิตี้ที่จำเป็นจะถูกนำเข้าไปยังไฟล์ Java และคลาสของ “ ใช้ Generics ” มีการประกาศ
- ต่อไป “ รายการอาร์เรย์ ” ประเภท “ สตริง ” ถูกประกาศด้วยชื่อ “ empName ” และเริ่มต้นโดยการจัดเตรียมองค์ประกอบข้อมูลจำลองสองรายการ
- จากนั้นสร้างตัวแปรประเภทสตริงสองตัวชื่อ “ อักษรย่อ ' และ ' สุดท้าย '. หลังจากนั้นให้กำหนดค่าโดยการเข้าถึงหมายเลขดัชนี
- ในตอนท้ายให้แสดงตัวแปรทั้งสองเพื่อดูผลลัพธ์
หลังจากสิ้นสุดการดำเนินการ ผลลัพธ์จะมีลักษณะดังนี้:
สแน็ปช็อตด้านบนแสดงให้เห็นว่าการเรียงพิมพ์ได้ดำเนินการโดยใช้ชื่อสามัญ
บทสรุป
เพื่อแก้ปัญหา “ ClassCastException ” ใน Java โปรแกรมเมอร์ต้องตรวจสอบความเข้ากันได้ของประเภทที่เหมาะสม การใช้ “ ยาชื่อสามัญ ' และ ' ตัวอย่าง ” โอเปอเรเตอร์ เพื่อแก้ไขข้อยกเว้น โปรแกรมเมอร์ต้องตรวจทานและแก้ไขการดำเนินการแคสต์โดยตรวจสอบความเข้ากันได้ของประเภทที่เหมาะสม นอกจากนี้ “ ClassCastException ” สามารถหลีกเลี่ยงได้โดยใช้ “ ยาชื่อสามัญ ” และด้วยการใช้ “ ตัวอย่าง ” โอเปอเรเตอร์ คู่มือนี้ได้แสดงวิธีการแก้ไข ClassCastException ใน Java