2012-06-13 21 views
14

Đây là lớp học của tôi:Làm cách nào để sử dụng phản chiếu để gọi phương thức có tham số?

public class A{ 
    private void doIt(int[] X, int[] Y){ 
     //change the values in X and Y 
    } 
} 

Tôi có một lớp học mà đang cố gắng sử dụng doIt để sửa đổi hai mảng. Tôi có một lỗi trong mã của tôi nhưng không thể tìm thấy nó.

public class B{ 
    public void myStuff(){ 
    A myA = new A(); 
    int[] X = {1,2,3,4,5}; 
    int[] Y = {4,5,6,7,8,9}; 
    Method doIt = A.class.getDeclaredMethod("doIt",new Object[]{X,Y}); // error 
    doIt.setAccessible(true); 
    doIt.invoke(myA,new Object[]{X,Y}); 
    } 
} 

Bất kỳ trợ giúp nào về cách sửa phương pháp myStuff?

Nếu tôi sử dụng getDeclaredMethod("doIt",new Object[]{X,Y}); mã không biên dịch.

Nếu thay vào đó tôi có getDeclaredMethod("doIt",null); thì nó nói NoSuchMethodException.

Trả lời

16

phương pháp của bạn được khai báo với hai int mảng

private void doIt(int[] X, int[] Y) 

và nếu bạn wan để thấy rằng phương pháp nào bạn cũng cần phải đặt các loại đối số của nó để ngăn chặn việc tìm kiếm phương pháp khác với cùng tên nhưng khác nhau.

A.class.getDeclaredMethod("doIt", int[].class, int[].class) 
+0

Cảm ơn bạn VERY MUCH! +1 – kasavbere

4

Phương pháp doIt mất hai thông số. Do đó, bạn cần phải vượt qua hai thông số, ngoài tên phương thức, đến Class#getDeclaredMethod(). Hai thông số bổ sung cần phải là trường hợp của Class, trong đó Object[] rõ ràng là thì không. Cụ thể, những trường hợp Class cần phải giống như các loại tham số mà doIt chấp nhận.

Method doIt = A.class.getDeclaredMethod("doIt", int[].class, int[].class); 
+0

Cảm ơn bạn RẤT NHIỀU! +1 – kasavbere

3

Phải không?

Method doIt = A.class.getDeclaredMethod("doIt", int[].class, int[].class); 
+0

Cảm ơn bạn VERY MUCH! +1 – kasavbere

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