Java 反射抽象类问题『求高手解答』

leafsoar 2012-09-25 09:06:52
现在这么一个需求,有一个第三方Jar包,有一个类A,A有一个方法x(B b),方法的参数b是一个抽象类形,需要自己去实现里面的方法c(),使用反射的好处就是如果Jar包不存在,也不会影响编译,当然运行时错误可以捕获排除。
比如不通过反射,那么应该这么写:

A a = new A();
a.x(new B(){
c(){
// 根据需要实现c方法
}

d(E e){

}
});

那么现在的问题是通过反射,很容易得到A的对象

Class<?> cA = Class.forName("A的全名");
Object oA = cA.newInstance();

这样就能创建A的对象了,但是以相同的方式不能创建B的对象,因为B是抽象类,
不能使用B类型的newInstance方法创建,并且不知道在哪里实现它的方法c()。

那么现在的问题是,我们获取到B的类型时,怎么实例化它的对象,
准确的说是去实现一个或者继承B类,并且定义它的方法。最终将其传给A的x方法作为参数运行!

问题就是这样,不知道我是否描述清楚,请有经验的朋友帮忙解答,或者这是不能实现的!
也许Java提供的“机制”不能完成这样的需求?固有此一问!
...全文
583 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iGoodLoser 2012-09-26
  • 打赏
  • 举报
回复
楼主可以了解下字节码操作框架,如javassist,cglib,asm等
ciltr 2012-09-26
  • 打赏
  • 举报
回复
加上jar包老老实实的自己写实现的代码不久行了吗 为什么要整得这么诡异 开发不要jar包
leafsoar 2012-09-26
  • 打赏
  • 举报
回复
是Android啊,动态编译也行么

找找看
healer_kx 2012-09-26
  • 打赏
  • 举报
回复
动态生成的话,不如用ASM库了。
raistlic 2012-09-26
  • 打赏
  • 举报
回复
动态生成一个类的代码(String),然后动态编译……

楼主去搜一搜动态代理实现的例子,也许能找到你需要的内容。
leafsoar 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

恐怕得考虑下学习Spring借助CGLIB的做法了。
[/Quote]
还没有接触过,那又是怎么样的一种机制。
不过这样的机制实现,应该是可知的吧。

但是现在Jar是由第三方提供的,不能更改。
如果是自己实现,那就直接写,现在就是为了方便Jar包的方便。
有Jar包就调用,没有Jar就Pass!
MiceRice 2012-09-25
  • 打赏
  • 举报
回复
恐怕得考虑下学习Spring借助CGLIB的做法了。
healer_kx 2012-09-25
  • 打赏
  • 举报
回复
Java的反射只能获取,而不能动态创建一个新的class出来,反射API里面也没有创建匿名类的。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧