有没有办法通过反射 添加方法A类的public void d(){}方法通过反射添加到C类的里面去
反射不能用来添加方法或属性,他能够知道类名而不实例化对象的状态下,获得对象的属性或调用方法。一般都是在配置文件中才用的。hibernate的映射文件,spring的配置文件都是通过反射做的。
哥们要先理解反射的作用:
1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法;
4.在运行时调用任意一个对象的方法;
你说的可以通过动态代理来实现
送相关代码:
--------------IC 接口
[code="java"]
public interface IC {
public void demo();
}
[/code]
--------------C类实现类
[code="java"]
public class C implements IC {
public void demo()
{
System.err.println("C类的demo方法");
}
}
[/code]
-------------委托类
[code="java"]
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class CHandler implements InvocationHandler {
private Object objOriginal;
public CHandler() {
}
public CHandler(Object obj) {
this.objOriginal = obj ;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result ;
result = method.invoke(this.objOriginal ,args);//在调用
ddd();
return result;
}
private void ddd() {
A c=new A();
c.d("demojava说的对,请结贴");
}
}
[/code]
-------------测试代码:
[code="java"]
class demo {
public static void main(String[] args) {
IC demo1 = new C();
IC proxy = (IC) Proxy.newProxyInstance(
demo1.getClass().getClassLoader(),
demo1.getClass().getInterfaces(),
new CHandler(demo1));
proxy.demo();
}
}
[/code]
asm java字节码编程....
如果喜欢动态代理方式..可以参考cglib