2009-04-19 72 views
7

Làm thế nào có thể ngoại lệ "foo" là không phải là được ném, nhưng cuộc gọi tiếp theo gọi() ném ngoại lệ dưới đây?IllegalArgumentException: đối tượng không phải là một thể hiện khai báo lớp

if (method.getDeclaringClass() != object.getClass()) 
    throw new RuntimeException("foo"); 

method.invoke(object); 

Ném ngoại lệ:

java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

+1

Bạn có thể cung cấp chi tiết di chuyển, ví dụ như định nghĩa lớp học không? – iny

+0

thay vì di chuyển tất nhiên – iny

Trả lời

13

Beh ... Cuộc gọi method.invoke() không phải là người ném trực tiếp. Phương pháp đích cũng đang sử dụng invoke và nó đã ném, vì vậy nó sôi lên.

Bài học kinh nghiệm: Xử lý InvocationTargetException riêng biệt với các trường hợp ngoại lệ khác.

+0

hhaaa. Tôi đã nghĩ về điều đó :) –

+0

Ouch ... điều đó thật khó chịu! –

+8

Vì vậy: luôn nhìn vào dấu vết ngăn xếp đầy đủ. –

Các vấn đề liên quan