如何在Java中获取对象类?
获取实例类的最佳方法是什么 推荐的方法是什么?以下各项之间的区别(性能)是什么:如何在Java中获取对象类?,java,performance,class,comparison,Java,Performance,Class,Comparison,获取实例类的最佳方法是什么 推荐的方法是什么?以下各项之间的区别(性能)是什么: 比较班级 if(this.getClass().equals(MyClass.class)){ 这似乎与this.getClass()==MyClass.class相同(或者使用class.forName(“com.test.MyClass”)) 测试的实例(看起来更可读) 使用类测试实例 if( MyClass.class.isInstance(myInst) ){ 我建议this.getClass(
- 比较班级
if(this.getClass().equals(MyClass.class)){
这似乎与this.getClass()==MyClass.class
相同(或者使用class.forName(“com.test.MyClass”)
)
- 测试的实例(看起来更可读)
- 使用类测试实例
if( MyClass.class.isInstance(myInst) ){
this.getClass().equals(MyClass.class)
当您想要精确匹配一个类时,因为对象的“someString”实例将生成true,因为String类是对象的子类型
这是检查任何实例和类之间的关系
在您的情况下,MyClass
的任何子类都将生成true
instanceof
测试左侧的对象是右侧类型的实例还是某个子类型
getClass()==…
测试类型是否相同
选项一只告诉您类是否正是您正在测试的。这通常不是很有用。例如,对于接口来说,它完全没有意义。如果这是您真正想要做的,您可能可以使用=
,除非您正在使用不同的类加载器,在这种情况下,可能会有超过每个类
对象的一个实例
选项二告诉您对象是否可以静态地分配给给定的类(即可以强制转换给它)
选项三与选项二相同,但使用。只有在进行动态键入时才需要此选项。内置的instanceof
可读性更强,效率也更高。您关于如何获取类的问题和比较类的示例似乎相互矛盾。您想知道什么?如何比较类型?Class.forName(“com.test.MyClass”)
应该避免,因为字符串
比MyClass更难重构。class
超类不应该依赖其子类的细节。闻起来像是糟糕的工程。你到底想做什么?@OrangeDog哼哼……你说得对……我想检查一下用户是否有权在s上做一些事情everals类,以同样的方式。因此,我将代码分解为超类(抽象)这就解决了这个问题。但是,现在我认为超类应该在每个子类中使用一个被重写的抽象方法。你甚至可以将大部分代码保存在超类中的public
方法中,并让每个子类重写一个protected
方法来执行不同的操作,如果你这样做有意义的话。其他rwise可能会使用SecurityCheck
接口或其他什么。你也可以澄清为什么你认为你的方式超越了其他可能性
if( MyClass.class.isInstance(myInst) ){