如何仅从其名称中知道方法返回类型?



我想知道方法返回类型仅从它的名称,我使用的代码,但它不适合我(它总是返回null):

public Object getType(String key) throws Exception {
        Object returnType = null;
        String name = key;
        Method[] methods = name.getClass().getMethods();
        for(int i =0; i < methods.length ; i++){
            if(key.equals(methods[i])){
                returnType = methods[i].getReturnType();
            }
        }
        return returnType;
    }

而不是:

if(key.equals(methods[i])){

你应该有

if(key.equals(methods[i].getName())){

也可以在你的代码中做一个小的改进,你不需要returnType局部变量,当你已经找到你正在寻找的方法时,你不需要遍历所有剩余的方法,所以代码可能是:

 public Object getType(String key) throws Exception {
    String name = key;
    Method[] methods = name.getClass().getMethods();
    for(int i =0; i < methods.length ; i++){
        if(key.equals(methods[i])){
            return methods[i].getReturnType();
        }
    }
    return null;
}

你错过了两件事。而不是

key.equals(methods[i])
应:

key.equals(methods[i].getName())
在我看来,第二件事是正在调查的类(您的代码在java.lang.String中查找方法)。所以这个方法应该是这样的:
public Object getType(String methodName, Class<?> clazz) throws Exception {
    String name = methodName;
    Method[] methods = clazz.getMethods();
    for (int i = 0; i < methods.length; i++) {
        if (name.equals(methods[i].getName())) {
            return methods[i].getReturnType();
        }
    }
    return null;
}

并命名为:

type = getType("someMethodName",YourClass.class);

type = getType("someMethodName",YourObject.getClass());

你的尝试有很多地方是错误的;您似乎在任意选择要调用的方法,凭直觉判断它们的作用。请参考您以前从未使用过的所有JDK方法的Javadoc。

  1. name.getClass()返回反映java.lang.String的对象。你需要Class.forName(name);

  2. 如果你不知道方法应该是哪个类的成员,你的整个方案就不可能工作。如果字符串同时包含类名和方法名,则需要对其进行解析以区分这两个名称;

  3. klass.getMethods()只会给你public成员方法。这可能是你想要的,也可能不是。还有getDeclaredMethods(),但这一个不给你继承的方法。

相关内容

  • 没有找到相关文章

最新更新