请问java中有没有不使用forName和实例化对象就能直接得到某个类的Class对象的方法呀?

jiaoxkxk 2007-03-21 10:41:00
通过判断类的是否是某个类的子类或者是否实现了某个接口,可以在程序里区别对待不同的对象。比如,
做一个显示表格的类,对于类型为字符串的单元格,可以简单调用drawString来显示,但对于某些自定义类的对象,比如说,定义一个接口StringRetrieveable,如果该对象实现了这个接口,则可以调用该接口的getString方法,获得字符串,然后再调用drawString方法显示。现在的问题是,我能够得到这个对象的Class,但不知道怎么写能够把这个Class和StringRetrieveable进行比较以判断该对象是否实现了这个接口。
下面是我已经知道的方法:
1. 使用forName("StringRetrieveable")获得接口StringRetrieveable的Class对象,调用该对象的isInstance,把单元格对象作为参数传递进去。但forName调用看样子是一种运行时获取Class对象的方法。效率上可能稍微有些损失。如果有像C或C#里面typeof关键字的方法就好了。
2. 使用异常机制,强制将单元格转换成StringRetrieveable接口,如果抛出异常,就在catch块内作相应处理。但这种变态使用异常的方法是在不怎么样,效率也不会高的。

请问java里面有没有类似typeof的关键字或什么别的机制,能够在编译时刻就能在程序里指定某个Class对象呢?
我这里先谢谢了。
...全文
386 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaoxkxk 2007-03-22
  • 打赏
  • 举报
回复
不好意思,我是在做J2ME的程序,试着这样写过,但不成功,编译时报错“cannot access java.lang.NoClassDefFoundError”。是j2sdk1.4.2,不知道和版本有没有关系。
不使用StringRetrieveable.class就没有问题。使用forName缺可以。这个错误很多人都说是找不到需要的类。我有点儿糊涂了。
hwldm0101 2007-03-22
  • 打赏
  • 举报
回复
我想自学JAVA,请问一下各位前辈,学JAVA前要先具备哪些知识
大概要多久才能入门
就是多久才能把基本的程序看明白
gtlang78 2007-03-22
  • 打赏
  • 举报
回复
直接用 类名.class
例如 String.class StringRetrieveable.class
jiaoxkxk 2007-03-22
  • 打赏
  • 举报
回复
我又作了一下试验,具体步骤如下:
javac -target 1.1 -classpath ..\midp2.0fcs\classes;.\tmpcls .\src\*.java
其中我实现编译好的接口类StringRetrieveable.class已经放在了tmpcls目录下,J2ME所需要的类在midp2.0fcs\classes下,需要编译的文件在src目录下。这么编译没有问题能够通过。
但J2ME要求指定-bootclasspath为 ..\midp2.0fcs\classes,一旦做了这个制定,编译的时候就报java.lang.NoClassDefFoundError错误。看来使用[类名].class的语法,编译器在产生代码的时候可能用到了什么方法,而该方法可能会使用到 java.lang.NoClassDefFoundError这个错误,而J2ME不能支持这个错误。javac的help对于-bootclasspath选项的说明是:"-bootclasspath <path> Override location of bootstrap class files" 而估计java.lang.NoClassDefFoundError可能在bootstrap class files里有了什么特殊的处理,使得这个错误不能被编译器所接受。所以在编译的时候就报了这个错误。
假如不指定-bootclasspath,虽然能够编译成功,但在后面的preverify过程里,就会报一个VERIFIER ERROR,错误还是java.lang.NoClassDefFoundError这个错误。
看来有可能在J2ME程序里是没法用[类名].class这种写法的了。
如果哪位大师级的高手能够把这个问题给在下解释一下,那将感激不尽。
jiaoxkxk 2007-03-21
  • 打赏
  • 举报
回复
耐心(且焦急地)等待中...
WPS Office 2019 是一款功能丰富的办公软件套装,它整合了文字、表格、演示、PDF 等组件,具备体积小巧、功能丰富、兼容性强等特点,能满足日常办公的多种需求。 功能组件丰富:包含 WPS 文字、WPS 演示、WPS 表格、WPS PDF 等组件,可用于文档编辑、表格计算、幻灯片制作、PDF 处理等,支持 DOC、DOCX、XLS、XLSX、PPT 等多种格式,能与 Microsoft Office 较好地兼容。 支持云存储与协作:用户登录 WPS 账号后,可实现多终端、跨平台的数据同步,还能与他人协同办公,文档可通过微信、QQ 等社交平台一键分享。 PDF 功能强大:提供沉浸式 PDF 阅读体验和稳定的编辑服务,支持一键编辑 PDF 文档内容。借助 OCR 技术,可精准转换文档、表格、PPT、图片等格式的文件。 界面设计优化:具有全新视觉设计,默认皮肤舒适清爽,还支持桌面背景、界面字体、皮肤、格式图标等个性化设置。同时,文档标签可拖拽成独立窗口或合并,用户可自主选择文档显示方式,还能将文件放置在不同工作区,便于分浏览与管理。 内置实用工具:内置了简单的网页浏览器,点击文档的链接会默认用其打开,可进行网页添加到首页、另存为 PDF 等操作。此外,“应用心” 集成了输出转换、文档助手、安全备份等多种实用功能。 模板资源丰富:稻壳商城提供了大量模板、范文、图片等素材资源,涵盖求职简历、总结计划、合同协议等常见文档型,方便用户快速创建专业文档。 表格功能特色突出:支持通过关键词快速切换工作表,设有阅读模式和护眼模式。还可分合并单元格,以及拆分合并单元格并填充内容。公式编辑器可轻松完成公式嵌套,筛选时可通过 “仅筛选此项” 一步完成特定值筛选,还能根据筛选条件生成动态分析图表。另外,“特色功能” 和 “智能工具箱” 菜单包含 PDF

62,634

社区成员

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

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