Java 反思 - 参数数量错误;期望 0,得到 1
Java Reflection - Wrong number of arguments; expected 0, got 1
我是运行这个java代码
ConnectivityManager connectivityManager = ((ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE));
try {
Method method = connectivityManager.getClass().getDeclaredMethod("getTetherableIfaces");
String[] strings = ((String[]) method.invoke(connectivityManager));
Log.i("hotspot", "getIface: "+strings.toString());
Method methodTether = connectivityManager.getClass().getDeclaredMethod("tether",String.class);
methodTether.setAccessible(true);
String[] param =new String[]{"wlan0"};
int i = (int) method.invoke(connectivityManager,"wlan0");
Log.i(TAG, "getIface: "+ "errorcode"+ i);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
但是我得到这个错误
java.lang.IllegalArgumentException: Wrong number of arguments; expected 0, got 1
at java.lang.reflect.Method.invoke(Native Method)
这是我要调用的系绳函数。
public int tether(String iface) {
try {
return mService.tether(iface);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
我试图用 object[]{"wlan0"}, String[]{"wlan0"}, (object){"wlan0"}, {"wlan0"}
和 (Object[])String[]{"wlan0"}
调用方法,但我得到了同样的错误。我不明白我做错了什么。对于任何帮助,我将不胜感激。
错误显示 "Wrong number of arguments; expected 0, got 1"。这意味着您调用的方法不是您认为的方法。被调用的方法没有任何参数,您正在向它传递一个参数。
您正在调用 method
而不是 methodTether
。
在行
Method method = connectivityManager.getClass().getDeclaredMethod("getTetherableIfaces");
method.invoke()
现在会将 getTetherableIfaces()
称为 invoke()
:
Invokes the underlying method represented by this Method object, on the specified object with the specified parameters
看起来像 getter 方法,因此不接受任何参数。然后你尝试传递一个会导致这个错误的参数
String[] strings = ((String[]) method.invoke(connectivityManager));
看起来你打算打电话给 methodTether.invoke()
我是运行这个java代码
ConnectivityManager connectivityManager = ((ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE));
try {
Method method = connectivityManager.getClass().getDeclaredMethod("getTetherableIfaces");
String[] strings = ((String[]) method.invoke(connectivityManager));
Log.i("hotspot", "getIface: "+strings.toString());
Method methodTether = connectivityManager.getClass().getDeclaredMethod("tether",String.class);
methodTether.setAccessible(true);
String[] param =new String[]{"wlan0"};
int i = (int) method.invoke(connectivityManager,"wlan0");
Log.i(TAG, "getIface: "+ "errorcode"+ i);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
但是我得到这个错误
java.lang.IllegalArgumentException: Wrong number of arguments; expected 0, got 1
at java.lang.reflect.Method.invoke(Native Method)
这是我要调用的系绳函数。
public int tether(String iface) {
try {
return mService.tether(iface);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
我试图用 object[]{"wlan0"}, String[]{"wlan0"}, (object){"wlan0"}, {"wlan0"}
和 (Object[])String[]{"wlan0"}
调用方法,但我得到了同样的错误。我不明白我做错了什么。对于任何帮助,我将不胜感激。
错误显示 "Wrong number of arguments; expected 0, got 1"。这意味着您调用的方法不是您认为的方法。被调用的方法没有任何参数,您正在向它传递一个参数。
您正在调用 method
而不是 methodTether
。
在行
Method method = connectivityManager.getClass().getDeclaredMethod("getTetherableIfaces");
method.invoke()
现在会将 getTetherableIfaces()
称为 invoke()
:
Invokes the underlying method represented by this Method object, on the specified object with the specified parameters
看起来像 getter 方法,因此不接受任何参数。然后你尝试传递一个会导致这个错误的参数
String[] strings = ((String[]) method.invoke(connectivityManager));
看起来你打算打电话给 methodTether.invoke()