gpt4 book ai didi

java - getDeclaredMethod 抛出异常

转载 作者:行者123 更新时间:2023-12-01 12:51:48 26 4
gpt4 key购买 nike

我想编写一个通过 rpc 进行通信的客户端服务器应用程序。该代码对于不带参数的函数运行得很好。但是,当我尝试使用单个参数调用函数(不支持更多参数)时,它会给我一个“NoSuchMethodException”。

以下是重要部分:

我要调用的函数:(rpcserver.CarPark.in)

public boolean in(int num) {
if(!closed) {
if (num <= (maxLots - curLots)) {
curLots += num;
return true;
}
}
return false;
}

public boolean in() {
if(!closed) {
if (curLots < maxLots) {
curLots += 1;
return true;
}
}
return false;
}

下面是调用函数的代码:(我使用 procedure[0] 作为函数名称,使用 [1] 作为参数。

    if(procedure.length == 1) {
try {
Method method = CarPark.class.getDeclaredMethod((String)procedure[0]);
return method.invoke(park);
} catch (Exception e) {
throw new Exception("Server couldn't find a fitting procedure.");
}
} else {
// length of 2, more isn't possible
try {
System.out.println((String)procedure[0] + ", " + procedure[1].getClass());
Method method = CarPark.class.getDeclaredMethod((String)procedure[0], procedure[1].getClass());
return method.invoke(park,procedure[1]);
} catch (Exception e) {
throw new Exception("Server couldn't find a fitting procedure." + e);
}
}

奇怪的是,该函数返回:java.lang.NoSuchMethodException: rpcserver.CarPark.in(java.lang.Integer)但是, println 命令给了我这个: in, class java.lang.Integer

那么为什么我可以调用不带参数的过程,但带参数却出现问题?

谢谢

最佳答案

问题是您尝试获取的 CarPark.in 版本采用原始整数,而 getDeclaredMethod 正在寻找采用 的版本java.lang.Integer,这不是一回事。如果将 int.classInteger.TYPE 传递给 getDeclaredMethod,您将看到它将能够正确找到该方法。

在没有看到完整代码的情况下,提出适合您的解决方案并不难,但请记住基元类型与其盒装等效项之间的区别,并警惕 autoboxing .

关于java - getDeclaredMethod 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24171144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com