Java怎样动态生成对象

hk2000c 2003-09-26 11:55:47
怎样在程序里动态的根据一些输入,来生成不同动态对象供以后使用?
有那位Superman做过这样的东西。
...全文
962 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yssss1980 2003-09-26
  • 打赏
  • 举报
回复
Object ob=Class.forName(className).NewInstance();

ob就是你要生成的对象啦
Yanbin_Q 2003-09-26
  • 打赏
  • 举报
回复
什么叫动态对象?
懒汉式单例模式那样子的行不行。
hk2000c 2003-09-26
  • 打赏
  • 举报
回复
to kypfos:
因为许多问题是根据实际情况需要而提出的,其实并非什么都是动态的,那样子也没办法使用,
比方说,用户需要一些能够自定义的运算规则,由这些规则以及以前预定义的运算类(基础规则)一起能算出最终结果,那这些由用户制定的函数怎样处理?
我想把他们放到一个ObjectPool中,而这些对象又不能预先定义,所以我想到了动态生成未知的类,虽然有点激进,但是觉得这样做能和以前的运算类结合的很好,使用也差不多。其他朋友觉得有什么想法?
hk2000c 2003-09-26
  • 打赏
  • 举报
回复
谢谢 jokerjava 以及其他的朋友给我很多启示,和解决答案。
Yanbin_Q 2003-09-26
  • 打赏
  • 举报
回复
类是动态的,动态类里的方法,变量都是动态,那这样做跟程序里进行硬编码也没有什么区别,用接口多好啊,楼主肯定是把问题复杂化了。什么都动态怎么去引用,GC怎么去处理啊。
jokerjava 2003-09-26
  • 打赏
  • 举报
回复
难点在哪呢

不就是用户根据规则订制java文件么 规则是你定的 你怎么生成都行了
然后调用sun.tools.javac.*中的类编译 然后用ClassLoader导入

然后
Object ob=Class.forName(className).NewInstance();

然后
java.lang.reflect.Method
java.lang.reflect.Constructor
java.lang.reflect.Member
hk2000c 2003-09-26
  • 打赏
  • 举报
回复
反射好像不是解决这个问题的钥匙吧。reflect 只能得到既定的类的实例和方法。并不能当动态创建的。不是吗?


new_zero 2003-09-26
  • 打赏
  • 举报
回复
gz
pxboy 2003-09-26
  • 打赏
  • 举报
回复
gz
znjq1001 2003-09-26
  • 打赏
  • 举报
回复
用反射!!
hk2000c 2003-09-26
  • 打赏
  • 举报
回复
如果那么简单就好了,其实这些对象类型可能以前没有声明过,也可能共同有一个抽象父类,由用户定义产生很多继承父类的动态子对象,也就说这些类也不是硬编码的,属于动态类,动态对象。里面的方法都是临时创建的,里面的方法实现是由一系列输入所确定的,有可能方法名相同,但参数数目类型不尽相同。有没有好的实现方法?



fast_time 2003-09-26
  • 打赏
  • 举报
回复
java.lang.reflect.Method
java.lang.reflect.Constructor
java.lang.reflect.Member


Yanbin_Q 2003-09-26
  • 打赏
  • 举报
回复
看看简单工厂模式,我想最适合你啦。
抽象产品 A 有被实现的三个具体产品

B C D

然后由一个具本工厂E的一个静态方法factory(String s):A
根据参数s来创建B C D 的实例,那几个实例就会有你的需要的不同的方法了。
yuqf2000 2003-09-26
  • 打赏
  • 举报
回复
搂住的意思是不是生成类文件,然后把.java文件保存在磁盘上,再调用?
这个可真可以试试,现根据要求生成类文件字符串,再保存到磁盘上,然后再进行编译,再使用楼上的方法newInstance,hoho,不会是真的吧。
hk2000c 2003-09-26
  • 打赏
  • 举报
回复
我想动态的生成一些对象,这些动态对象可以根据不同用户参数需要提供一些参数数目不同的函数。
这种机制怎样实现?

web_spider 2003-09-26
  • 打赏
  • 举报
回复
如果是相关类,首先可以提取一个接口,例如:
CommanOperation;然后,用
CommanOperation comm =(CommanOperation)Class.forName(className).newInstance();
生成相应的实例,以后可以根据接口作相应的操作。
如果是一组无关的类,就没有必要动态生成了。

62,616

社区成员

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

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