0

我想只从它的名称知道方法返回类型,我正在使用该代码,但它对我不起作用(它总是返回 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;
    }
4

3 回答 3

3

代替:

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;
}
于 2013-05-30T10:59:38.930 回答
1

你的尝试有很多问题;您似乎在任意选择调用方法,直观地判断它们的作用。请查阅您以前从未使用过的所有 JDK 方法的 Javadoc。

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

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

  3. klass.getMethods()只会给你公共成员方法。这可能是也可能不是您所追求的。也有getDeclaredMethods(),但是这个没有给你继承的方法。

于 2013-05-30T11:13:07.323 回答
1

你错过了两件事。反而

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());
于 2013-05-30T11:13:18.547 回答