我是Java的新手,我正面临一个反思问题.
假设我必须fooMethod
在类的实例上动态调用该方法Foobar
到目前为止,我得到了一个例子Foobar
:
Object instance = Class.forName("Foobar").newInstance();
Run Code Online (Sandbox Code Playgroud)
假设我知道fooMethod
这个对象有一个方法(我甚Class.forName("Foobar").getDeclaredMethods()
至可以查看),请问如何调用它?
Method method = getClass().getDeclaredMethod("methodName");
m.invoke(obj);
Run Code Online (Sandbox Code Playgroud)
这是因为该方法没有参数.如果有,则将参数类型作为参数附加到此方法.
obj
是您调用方法的对象.
你可以使用反射
样本 class
package com.google.util;
class Maths {
public Integer doubleIt(Integer a) {
return a*2;
}
}
Run Code Online (Sandbox Code Playgroud)
并使用这样的东西 -
步骤 1 :-class
使用给定的输入名称加载String
Class<?> obj = Class.forName("Complete_ClassName_including_package");
//like:- Class obj = Class.forName("com.google.util.Maths");
Run Code Online (Sandbox Code Playgroud)
第 2 步:- 获取Method
给定的名称和参数类型
Method method = obj.getMethod("NameOfMthodToInvoke", arguments);
//arguments need to be like- `java.lang.Integer.class`
//like:- Method method= obj.getMethod("doubleIt", java.lang.Integer.class);
Run Code Online (Sandbox Code Playgroud)
第 3 步:-invoke
Method
通过传递对象和参数的实例
Object obj2 = method.invoke(obj.newInstance(), id);
//like :- method.invoke(obj.newInstance(), 45);
Run Code Online (Sandbox Code Playgroud)
你也可以这样做第 2 步
(当您不知道特定方法存在于 a 中时,class
您可以通过循环方法的数组来检查所有方法)
Method[] methods = obj.getMethods();
Method method = null;
for(int i=0; i < methods.length(); i++) {
if(method[1].getName().equals("methodNameWeAreExpecting")) {
method = method[i];
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49093 次 |
最近记录: |