ฉันพยายามทำความเข้าใจและอ่านสิ่งที่อาจทำให้เกิด แต่ฉันไม่สามารถทำได้:
ฉันมีสิ่งนี้ในรหัสของฉัน:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
สิ่งนั้นคือเมื่อมันพยายามเรียกใช้วิธีการบางอย่างมันจะโยน
InvocationTargetException
แทนที่จะเป็นข้อยกเว้นที่คาดหวังอื่น ๆ (โดยเฉพาะArrayIndexOutOfBoundsException
) ในฐานะที่เป็นจริงผมรู้ว่าสิ่งที่วิธีการที่จะเรียกผมเดินตรงไปยังรหัสวิธีนี้และเพิ่มลองจับบล็อกบรรทัดที่คิดว่าจะโยน ArrayIndexOutOfBoundsException
และมันจริงๆโยนArrayIndexOutOfBoundsException
ตามที่คาดไว้ แต่เมื่อขึ้นไปก็เปลี่ยนไปInvocationTargetException
และในรหัสข้างต้นcatch(Exception e)
e คือInvocationTargetException
และไม่ArrayIndexOutOfBoundsException
เป็นไปตามที่คาดไว้
สิ่งใดที่อาจทำให้เกิดพฤติกรรมดังกล่าวหรือฉันจะตรวจสอบสิ่งนั้นได้อย่างไร