请问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对象呢?
我这里先谢谢了。
...全文
395 5 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
耐心(且焦急地)等待中...
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置心等企业级间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]内容概要:本文介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行分析的技术方案,旨在模拟超宽带脉冲通过该天线结构的传播过程,并重点计算微带结构的回波损耗参数。该方法通过数值仿真手段精确建模电磁波在天线的传播特性,适用于高频电磁场仿真与天线性能评估,能够有效支持天线设计优化。文可能涵盖FDTD算法的基本原理、网格划分、边界条件设置、激励源配置及结果后处理等关键环节。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程,从事天线设计、射频工程或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展超宽带天线的设计与性能仿真;②研究微带天线在脉冲激励下的瞬态响应特性;③计算和优化天线的回波损耗(S11参数),提升匹配性能;④教学与科研用于电磁仿真方法的实践训练。; 阅读建议:建议读者结合FDTD理论基础与MATLAB编程实践,逐步实现仿真流程,重点关注时间步长、空间网格精度和边界条件对仿真结果的影响,并通过对比仿真与实测数据验证模型准确性。

62,628

社区成员

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

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