读书人

反射解决方案

发布时间: 2013-01-25 15:55:30 作者: rapoo

反射
本帖最后由 itxuls 于 2012-12-19 16:49:31 编辑


class A{

public void fun(){
System.out.println("class A");
}

}

class B extends A
{
public void fun(){
System.out.println("class B");
}
}

public class Callback {

/**
* @param args
*/
public static void main(String[] args) {

// 有什么方法 可以不调用B 访问到B的fun方法?
// 请教...
}

}

[解决办法]
引用:
不调用B什么意思?不使用new B()这种写法还是?

人家问的就是反射呗
就是不new一个B,但是通过反射创建一个方法

/**
* 执行某对象方法
*
* @param owner
* 对象
* @param methodName
* 方法名
* @param args
* 参数
* @return 方法返回值
* @throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object[] args)
throws Exception {

Class ownerClass = owner.getClass();

Class[] argsClass = new Class[args.length];

for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}

Method method = ownerClass.getMethod(methodName, argsClass);

return method.invoke(owner, args);
}

对象:Class ownerClass = Class.forName(className);
[解决办法]
引用:


引用:
引用:不调用B什么意思?不使用new B()这种写法还是?
人家问的就是反射呗
就是不new一个B,但是通过反射创建一个方法
Java code?123456789101112131415161718192021222324252627/** * 执行某对象方法 * * @param o……

2楼的做法不到位,不实例化B的话,是不能调用fun方法的,只是取class的话是调用不起来了!
还是需要实例化,这样的话就需要调用构造函数,还是得new一个B。

B b = (B) Class.forName(className).newInstance();


读书人网 >J2SE开发

热点推荐