繁体   English   中英

getDeclaredMethod引发异常

[英]getDeclaredMethod throws exception

我想编写一个通过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 ,则会看到它能够正确找到该方法。

不用看完整的代码就可以为您提供一个适合您的解决方案,这很容易,但是请记住原始类型及其装箱的等效项之间的区别,并要警惕自动装箱

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM