|
我的问题是一个类并没有实现一个接口却能被转型成那个接口请问这是如何实现的???
|
我的问题是一个类并没有实现一个接口却能被转型成那个接口请问这是如何实现的???
我的意思是
Proxy v = (Proxy)oo;
System.out.println(v);
Good f = (Good)v;
proxy并没有实现good接口,但是转换成good以后并不出错?
请问这是如何实现的???????
在有限时间精力下,我们只要知道有这样一个特点,我们需要研究的是,如何利用这个特点为我们应用服务,也就是模式思维,是一种向上面向业务的思维。
当然,我这样回答你可能不满意,因为虽然我使用动态代理做了Jdon框架,并且又基于其上开发N多复杂系统,但是其内部我还真不知道,我个人也没有想知道过。
楼上的我觉的有些情况下,某种精神还是应该具备的 ^^
具体java源码我没看到,不过
昨晚测试,发现了一点东西,由于所有"对象实例"都是由Class(class.newInstance(),new是低层实现,我这里只是说明我的class指得是什么 :) )对象产生的但是动态内部将其class对象置换
TTT t = new TTT();
Object oo = factory(t);
Proxy v = (Proxy)oo;
System.out.println(v.getClass().getName()); //这里
System.out.println(v);
Good f = (Good)v;
f.ff();
但是由于需要得到被代理类的引用,需要传递其接口,
Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new Test(oo));
并且只能是接口
如果
abstract class Good {
abstract void ff();
}
就会出错
总结一下:
1被代理的类实际上,是被代理了class
2被代理类需要实现某个接口,而不是继承某个类
[该贴被checkcode于2007年03月01日 21:40修改过]
这个是他替你写的东西
你看看这个就明白你问得问题了
[该贴被Coolyu0916于2007年03月01日 21:03修改过]
你这段代码是回调实现,应该算模式的应用吧,我问的是底层实现:)
我过我发现proxy中最重要的部分,竟然是
private static native Class defineClass0(ClassLoader loader, String name,
byte[] b, int off, int len);
.......
不过谢了各位,终于认识到有些东西应该先记住(但是探究总是好的) :)
[该贴被checkcode于2007年03月01日 21:39修改过]
那就看看源代码吧