Tôi phải bỏ lỡ điều gì đó rất cơ bản. Khi tôi cố gắng để vượt qua một mảng của bất kỳ loại nào trong một lời gọi phương thức tôi nhận được một lỗi. Tuy nhiên khi tôi làm điều đó bình thường nó hoạt động.IllegalArgumentException khi truyền một Mảng làm tham số trong khi gọi phương thức
Đây là mã hoàn chỉnh mà không
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
// Normal
MyClass.sayHello(new String[] {"StackOverflow"});
// Reflection
Method m = MyClass.class.getMethod("sayHello", String[].class);
m.invoke(null, new String[]{"StackOverflow"});
}
static class MyClass {
public static void sayHello(String[] args) {
System.out.println("Hello " + args[0]);
}
}
}
Các ngoại lệ ném
Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at Main.main(Main.java:11)
String...
không hoạt động hoặc btw.
TLDR: Như mọi khi RTFD – mvd
Vâng, tôi đã cảnh báo tương tự. Nó không có ý nghĩa gì vì sao Java sẽ cần một mảng các đối số mảng, nhưng nó hoạt động. Cảm ơn! – TomTom
@TomTom: Nó có ý nghĩa hoàn hảo: nó cần một mảng vì có thể có nhiều đối số. Phần tử duy nhất của mảng đó là chính nó là một mảng, bởi vì tham số cho phương thức là một mảng. Hãy thử thêm một tham số khác vào phương thức và nó sẽ có ý nghĩa hơn. Và trong tương lai, * không bao giờ * bỏ qua cảnh báo :) –