浏览 5354 次
锁定老帖子 主题:能否动态的创建一个类
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-04
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-04
这个对于静态类型的Java应当是不可以的.
|
|
返回顶楼 | |
发表时间:2007-05-04
可以的,但是很复杂,代价太大了,用asm可以在运行时生成类。说说你的需求,看是否一定要动态创建类。
|
|
返回顶楼 | |
发表时间:2007-05-04
Java 6里面带编译器,做这个事就容易多了。
|
|
返回顶楼 | |
发表时间: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的反射设计比较清晰、干净。 |
|
返回顶楼 | |
发表时间:2007-05-05
这位楼上说的是在工程里面已经编写了一个类,然后再在程序运行的时候动态的创建。而我的意思是原本工程里面没有这个类,(也就是不能通过java.lang.Class.forName("classname").newInstance()来取得这个类的实例)而是在程序里面现行的创建一个类
仔细的想想,在JAVA代码里面都是用的经过编译的二进制代码,如果这样的话,我上面想的根本行不通,因为没有经过编译。 |
|
返回顶楼 | |
发表时间:2007-05-05
shangmw 写道 这位楼上说的是在工程里面已经编写了一个类,然后再在程序运行的时候动态的创建。而我的意思是原本工程里面没有这个类,(也就是不能通过java.lang.Class.forName("classname").newInstance()来取得这个类的实例)而是在程序里面现行的创建一个类
仔细的想想,在JAVA代码里面都是用的经过编译的二进制代码,如果这样的话,我上面想的根本行不通,因为没有经过编译。 也不是完全不可以. 你可以读取一个java源文件参数,动态调用javac编译它,然后用反射实例化,调用. 有点类似IDE(eclipse)的用法. |
|
返回顶楼 | |
发表时间:2007-05-06
楼主的关键词是J2ME
在CLDC 1.0中,是不支持反射的,就是说不能动态创建类 在CLDC 1.1中,支持很少的反射,效率很低。 综上,在J2ME程序中,不要琢磨反射的事情了~ |
|
返回顶楼 | |
发表时间:2007-05-06
j2me里面搞这些干啥?有时间还是考虑怎么能多弄几个对象用吧。
|
|
返回顶楼 | |