各位大神:
小弟现在有一非常蛋疼的问题,提出来给大家探讨下。现我在代码中用一开源库生成了一个类A的对象a,这个小a我将会在别的地方使用。但是,光a的功能不足以满足我的使用,所以想为A添加一些功能,而同时我不希望修改开源库的代码,因为这样有可能以后每次升级开源库都要改代码。请问我怎样在不修改开源库代码的情况下,为A(或者说a)添加功能(方法)。
本来考虑过decorator模式,新建类B,使用B实现A的所有接口,然后再增加功能;其中B的对象b,使用a进行初始化,只要调用A的接口,就使用b对象调用其a对象完成功能,调用添加的功能就使用b对象。但是发现类A的父类有很多(很多层),且几乎每一层都有实现的接口,那这样我的B类就要实现十几个接口,太复杂,所以想能不能有一种方法使B继承A,并为其添加功能。然后使用开源库生成a,再将a转化为b(下转型)。
不过由于向下转型报错,目前不能实现,想请教坛子里的大神,有没有其他办法小弟拜谢!javadecorator下转型
小弟现在有一非常蛋疼的问题,提出来给大家探讨下。现我在代码中用一开源库生成了一个类A的对象a,这个小a我将会在别的地方使用。但是,光a的功能不足以满足我的使用,所以想为A添加一些功能,而同时我不希望修改开源库的代码,因为这样有可能以后每次升级开源库都要改代码。请问我怎样在不修改开源库代码的情况下,为A(或者说a)添加功能(方法)。
本来考虑过decorator模式,新建类B,使用B实现A的所有接口,然后再增加功能;其中B的对象b,使用a进行初始化,只要调用A的接口,就使用b对象调用其a对象完成功能,调用添加的功能就使用b对象。但是发现类A的父类有很多(很多层),且几乎每一层都有实现的接口,那这样我的B类就要实现十几个接口,太复杂,所以想能不能有一种方法使B继承A,并为其添加功能。然后使用开源库生成a,再将a转化为b(下转型)。
不过由于向下转型报错,目前不能实现,想请教坛子里的大神,有没有其他办法小弟拜谢!javadecorator下转型
由此,当做完准备工作,使用Rhino运行上面的脚本,Rhino会找到document所引用的java对象,并调用java对象的getElementById方法。现在就是我遇到的问题了,我使用apache的开源库生成了document对象(这个对象生成可不容易啊.........),然后我将这个生成的对象介绍给Rhino认识,这样它就知道什么时候调用document了。但是,apache生成的document还不足以满足我的需求。如果有这么一句脚本“document.myMethod();”,由于apache的document没有这个方法,运行就会出异常。所以我必须在已经生成了apache的document的基础上,为他添加myMethod方法。
这就是难点啦..............我希望扩充后的对象(叫他kdocument吧),又可以当document使用,又可以当kdocument使用..................。
有点像继承,但是是已经有了父对象后,将父对象转化为子对象的继承,就是下转型..............这个java会报错,所以现在寻求其他的解决办法。
不过我现在是,父类A对象a已经有了,然后为a添加新的方法....................有点像动态添加方法的感觉哦.............
A a = new A() //自己选择适合注入方式.//随便包装一下A的方法
public void C(int i){
a.C(i);
}public String D(String s){
return a.D(s);
}
//这个是B自己的方法
public String E(String ss){
return;
}}
终极方法。不过每次A更新都需要改一句代码。
class B {
//自己的方法
}
然后让A的终极父类去继承B。然后就行了。不过每次更新都要extends B.