ดูที่รหัสไบต์หากสิ่งที่ส่งคืนไม่ตรงกับข้อกำหนดคุณจะได้รับข้อผิดพลาดในการคอมไพล์
ตัวอย่าง:
for(;;)
จะแสดง bytecodes:
L0
LINENUMBER 6 L0
FRAME SAME
GOTO L0
สังเกตการขาด bytecode ที่ส่งคืนใด ๆ
สิ่งนี้ไม่เคยถูกตีคืนดังนั้นจึงไม่ส่งคืนชนิดที่ไม่ถูกต้อง
สำหรับการเปรียบเทียบวิธีการเช่น:
public String getBar() {
return bar;
}
จะส่งคืนโค้ดไบต์ต่อไปนี้:
public java.lang.String getBar();
Code:
0: aload_0
1: getfield #2; //Field bar:Ljava/lang/String;
4: areturn
สังเกต "areturn" ซึ่งหมายถึง "คืนการอ้างอิง"
ตอนนี้ถ้าเราทำต่อไปนี้:
public String getBar() {
return 1;
}
จะส่งคืนโค้ดไบต์ต่อไปนี้:
public String getBar();
Code:
0: iconst_1
1: ireturn
ตอนนี้เราสามารถเห็นได้ว่าประเภทในคำจำกัดความไม่ตรงกับประเภทคืนของ ireturn ซึ่งหมายถึง return int
ดังนั้นสิ่งที่เกิดขึ้นจริง ๆ ก็คือหากวิธีการนั้นมีเส้นทางการส่งคืนเส้นทางนั้นจะต้องตรงกับประเภทการคืนสินค้า แต่มีอินสแตนซ์ในไบต์ที่ไม่มีเส้นทางการส่งคืนถูกสร้างขึ้นและทำให้ไม่ผิดกฎ