我想调用主方法,它是静态的。我得到了类类型的对象,但我不能创建该类的实例,也不能调用静态方法main。
当前回答
请记住,在尝试获得所需的方法时,还必须提供参数类型。
下面是一个使用Groovy编写的示例。
import groovy.transform.CompileStatic
import org.springframework.util.ReflectionUtils
import java.lang.reflect.Method
@CompileStatic
class Fun {
final static String funText() {
return 'Have fun now!'
}
final static String myText(String text) {
return text
}
}
Method m1 = ReflectionUtils.findMethod(Fun, 'funText')
println m1.invoke(null)
Method m2 = ReflectionUtils.findMethod(Fun, 'myText', String)
println m2.invoke(null, 'Some text.')
Method m3 = ReflectionUtils.findMethod(Fun, 'myText')
println m3.invoke(null, 'Another text.')
在下面的例子中,m3将失败,因为没有这样的方法。
其他回答
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");
如果方法是私有的,则使用getDeclaredMethod()而不是getMethod()。并在方法对象上调用setAccessible(true)。
String methodName= "...";
String[] args = {};
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
// for static methods we can use null as instance of class
m.invoke(null, new Object[] {args});
break;
}
}
public class Add {
static int add(int a, int b){
return (a+b);
}
}
在上面的例子中,'add'是一个静态方法,它接受两个整数作为参数。
下面的代码片段用于调用输入1和2的“add”方法。
Class myClass = Class.forName("Add");
Method method = myClass.getDeclaredMethod("add", int.class, int.class);
Object result = method.invoke(null, 1, 2);
参考链接。
请记住,在尝试获得所需的方法时,还必须提供参数类型。
下面是一个使用Groovy编写的示例。
import groovy.transform.CompileStatic
import org.springframework.util.ReflectionUtils
import java.lang.reflect.Method
@CompileStatic
class Fun {
final static String funText() {
return 'Have fun now!'
}
final static String myText(String text) {
return text
}
}
Method m1 = ReflectionUtils.findMethod(Fun, 'funText')
println m1.invoke(null)
Method m2 = ReflectionUtils.findMethod(Fun, 'myText', String)
println m2.invoke(null, 'Some text.')
Method m3 = ReflectionUtils.findMethod(Fun, 'myText')
println m3.invoke(null, 'Another text.')
在下面的例子中,m3将失败,因为没有这样的方法。
来自Method.invoke()的Javadoc:
如果底层方法是静态的,那么指定的obj参数将被忽略。它可能是空的。
当你
Class klass = ...; Method m = klass.getDeclaredMethod(methodName, paramtypes); m.invoke(null, args)
推荐文章
- 如何设置超时在改造库?
- java lambda可以有一个以上的参数吗?
- HashMap -获取第一个键值
- 使用Jackson将JSON字符串转换为漂亮的打印JSON输出
- Android - SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度
- Javadoc @see或{@link}?
- 在准备语句中使用“like”通配符
- Android Eclipse -无法找到*.apk
- javac和Eclipse编译器之间的区别是什么?
- 工厂模式和策略模式之间的区别是什么?
- 在Java中使用正则表达式提取值
- 如何允许所有网络连接类型HTTP和HTTPS在Android(9)馅饼?
- Intellij IDEA Java类在保存时不能自动编译
- 何时使用Mockito.verify()?
- 在maven中安装mvn到底做什么