我想动态地使用我的子类的方法! 我怎样才能访问子方法? 父类是:
public abstract class A{
String temp;
public abstract String getData();
public void setData(String temp){
this.temp=temp;
}
和childs类是:
public class B extends A{
@Override
public String getData() {
return "B--GetData";
}
@Override
public void setData(String temp) {
this.temp= temp+"-B";
}
public class C extends A{
@Override
public String getData() {
return "C--GetData";
}
@Override
public void setData(String temp) {
this.temp= temp+"-C";
}
}
我使用此代码访问我的子类
String parseData(String Name){
Class<?> cls = Class.forName(Name);
cls.getMethods();
}
我怎样才能动态调用C类的getData()方法? 感谢
答案 0 :(得分:1)
您可以这样调用您的方法:
methods[0].invoke(new B(), null);
you can use `method[1]` or `new C()` based on which method to call and on which object.
以下代码 也显示了如何访问私有方法。 示例:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
class ExitPuzzle extends MyAbstractClass {
public static void main(String... args) throws IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Class clazz = MyAbstractClass.class;
Method[] methods = clazz.getDeclaredMethods();
System.out.println(Arrays.toString(methods));
methods[0].setAccessible(true); // needed only if method is non-public
methods[0].invoke(new ExitPuzzle(), null);
}
}
abstract class MyAbstractClass {
private void myMethod() {
System.out.println("in MyAbstractClass");
}
}
答案 1 :(得分:1)
public String parseData(String Name) throws Exception {
Class<?> cls = Class.forName(Name);
Method[] methods = cls.getMethods();
for (Method method : methods) {
if(method.getName().equals("setData")) {
method.invoke(cls.newInstance(), "Test");
}
}
return null;
}
请尽量使用。
您可以调用以下方法
parseData(C.class.getName());