2012-01-29 33 views
5

Tôi có một phương thức mà tôi muốn gọi qua phản chiếu. Phương thức thực hiện một số kiểm tra khác nhau về các đối số của nó và có thể ném ngoại lệ NullPointer và IllegalArgument.Các ngoại lệ phản chiếu và kiểm tra Java

Gọi phương thức qua Phản chiếu cũng có thể ném các ngoại lệ của IllegalArgument và NullPointer cần phải bị bắt. Có cách nào để xác định liệu ngoại lệ có phải là do phương thức Gọi phản chiếu hay do chính phương thức đó không?

Trả lời

17

Nếu chính phương thức này đã ném ngoại lệ, thì nó sẽ được bao bọc trong một InvocationTargetException.

Mã của bạn có thể trông như thế này

try 
{ 
    method . invoke (args) ; 
} 
catch (IllegalArgumentException cause) 
{ 
    // reflection exception 
} 
catch (NullPointerException cause) 
{ 
    // reflection exception 
} 
catch (InvocationTargetException cause) 
{ 
    try 
    { 
      throw cause . getCause () ; 
    } 
    catch (IllegalArgumentException c) 
    { 
      // method exception 
    } 
    catch (NullPointerException c) 
    { 
      //method exception 
    } 
} 
+3

Ngoại lệ được gọi là 'InvocationTargetException', không phải là 'MethodInvocationException'. –

+1

@Stephen C Tốt bắt. – emory

0

Trong câu trả lời cho câu hỏi ban đầu, các dấu vết ngăn xếp trong trường hợp ngoại lệ sẽ khác nhau.

Thay vào đó, bạn có thể có chức năng bắt các ngoại lệ này và đặt lại chúng làm ngoại lệ cụ thể theo phương thức (hoặc lớp).

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