论坛首页 移动开发技术论坛

能否动态的创建一个类

浏览 5354 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-04  
请问能否根据动态获得的参数而动态的创建一个类?
   发表时间:2007-05-04  
这个对于静态类型的Java应当是不可以的.
0 请登录后投票
   发表时间:2007-05-04  
可以的,但是很复杂,代价太大了,用asm可以在运行时生成类。说说你的需求,看是否一定要动态创建类。
0 请登录后投票
   发表时间:2007-05-04  
Java 6里面带编译器,做这个事就容易多了。
0 请登录后投票
   发表时间:2007-05-04  
shangmw 写道
请问能否根据动态获得的参数而动态的创建一个类?

呵呵,当然是可以的,但你的问题也问得太简单了,应该参考一下这个论坛的“提问的艺术”。
“动态创建”,问题是如何理解“动态创建”,比如:
最简单的,是提供一个class的名称(算不算一个动态的参数?),然后“动态创建”new Instance一个类的实例,前提是,你已经在classpath中有了这个这个类的class文件。可以参考
java.lang.Class.forName("classname").newInstance()

复杂一些的,比如:根据提供的ClassName, field name, method name and parameters' name 使用java.lang.reflect包,创建真正的“动态”类和实例。不写了,这方法太累,有兴趣自己去看java doc了。java在这一块也算比较完善了,但还是比不上.net,.net的反射设计比较清晰、干净。
0 请登录后投票
   发表时间:2007-05-05  
这位楼上说的是在工程里面已经编写了一个类,然后再在程序运行的时候动态的创建。而我的意思是原本工程里面没有这个类,(也就是不能通过java.lang.Class.forName("classname").newInstance()来取得这个类的实例)而是在程序里面现行的创建一个类

仔细的想想,在JAVA代码里面都是用的经过编译的二进制代码,如果这样的话,我上面想的根本行不通,因为没有经过编译。
0 请登录后投票
   发表时间:2007-05-05  
shangmw 写道
这位楼上说的是在工程里面已经编写了一个类,然后再在程序运行的时候动态的创建。而我的意思是原本工程里面没有这个类,(也就是不能通过java.lang.Class.forName("classname").newInstance()来取得这个类的实例)而是在程序里面现行的创建一个类

仔细的想想,在JAVA代码里面都是用的经过编译的二进制代码,如果这样的话,我上面想的根本行不通,因为没有经过编译。


也不是完全不可以.
你可以读取一个java源文件参数,动态调用javac编译它,然后用反射实例化,调用.
有点类似IDE(eclipse)的用法.
0 请登录后投票
   发表时间:2007-05-06  
楼主的关键词是J2ME

在CLDC 1.0中,是不支持反射的,就是说不能动态创建类

在CLDC 1.1中,支持很少的反射,效率很低。

综上,在J2ME程序中,不要琢磨反射的事情了~
0 请登录后投票
   发表时间:2007-05-06  
j2me里面搞这些干啥?有时间还是考虑怎么能多弄几个对象用吧。
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics