日期:2014-05-20  浏览次数:20735 次

J2ME的编程中能否使用[类名].class的形式直接指定某个已知类的Class对象呢?
我试着用[类名].class的方法获取某个已知类的Class对象,但在编译的时候报错(java.lang.NoClassDefFoundError)。
编译命令如下:
javac   -d   .\tmpclass   -target   1.1   -bootclasspath   ..\midp2.0fcs\classes   .\src\*.java
其中..\midp2.0fcs\classes是放置MIDP相关类的目录,.\src下的一个.java文件里面有这样的语句   Class   cls   =   String.class;
在编译的时候,编译器报错:
[cannot   access   java.lang.NoClassDefFoundError
file   java\lang\NoClassDefFoundError.class   not   found]
这似乎暗示了对于这种[类名].class的写法,编译器需要存取java.lang.NoClassDefFoundError这个类(不管是编译器自己用还是给生成的代码用),而覆盖启动类的选项以指定使用MIDP2.0特定的启动类的时候,MIDP2.0不支持这个错误类[java.lang.NoClassDefFoundError]。所以造成了编译错误。
不知道是否是这个样子的。希望哪位高手指点一下,是否在J2ME程序里就不能使用[类名].class这种形式呢?
如果是的话,不知道为什么会这样设计。我的理解用[类名].class的方法获得Class对象应该比Class.forName这种手段应当效率会高一些,毕竟是在编译时就可以确定类型,应该能获得编译器的很多帮助,比如类型是否安全,如何从原数据中获取足够的信息以构造Class的对象,总之,应该比运行时用Class.forName再传入一个字符串的方法有效率。但不知为什么以简单高效为设计目标的J2ME会不支持这种方法。
另外,如果有其他方法能够获得与[类名].class同样的效果,而且具有很高的效率,希望高手不吝赐教。


------解决方案--------------------
J2me中,似乎不支持 类名.class这样的语法
------解决方案--------------------
我试了一下,[类名].class是可以访问的,但是我建议你不用考虑那么复杂的设计,在J2ME中,对面向对象的要求不是很高,相比之下更关心内存的益处