【问题标题】:how can i know the method return type from only it's name?我如何仅从它的名称知道方法返回类型?
【发布时间】:2026-01-29 17:05:01
【问题描述】:
我想只从它的名称知道方法返回类型,我正在使用该代码,但它对我不起作用(它总是返回 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;
}
【问题讨论】:
标签:
java
reflection
methods
return
return-type
【解决方案1】:
代替:
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;
}
【解决方案2】:
你的尝试有很多问题;您似乎在任意选择调用方法,直观地判断它们的作用。请查阅您以前从未使用过的所有 JDK 方法的 Javadoc。
name.getClass() 返回反映在java.lang.String 上的对象。你需要Class.forName(name);
如果您不知道该方法应该是哪个类的成员,那么您的整个方案就不可能工作。如果您的字符串同时包含类名和方法名,那么您需要对其进行解析以将这两个名称分开;
klass.getMethods() 只会为您提供公共成员方法。这可能是也可能不是您所追求的。还有getDeclaredMethods(),不过这个没有给你继承的方法。
【解决方案3】:
你错过了两件事。而是
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());