3

获取实例类的最佳方法是什么?

推荐的方法是什么?以及它们之间有什么区别(性能):

  • 比较班级

if( this.getClass().equals(MyClass.class) ){ 这似乎与this.getClass() == MyClass.class (或可能使用 Class.forName("com.test.MyClass"))相同

  • 测试(似乎更具可读性)的实例

    if( this instanceof MyClass ){
    
  • 使用类测试实例

    if( MyClass.class.isInstance(myInst) ){
    
4

2 回答 2

2

我会建议this.getClass().equals( MyClass.class)您完全匹配一个类,"someString" instanceOf Object因为 String 类是 Object 的子类型,因此会产生 true。

这是检查is a任何实例和类之间的关系。

在您的情况下,任何子类MyClass都会产生true

  1. instanceof测试左边的东西是右边类型的实例还是某个子类型。
  2. getClass() == ...测试类型是否相同。
于 2012-07-18T13:55:37.217 回答
1

选项一仅告诉您该类是否正是您正在测试的内容。这通常不是很有用。例如,它对接口完全没有意义。如果这实际上是您想要做的,您可能可以使用==,除非您使用不同的 s,在这种情况下,每个对象ClassLoader可能有多个实例。Class

选项二告诉您对象是否可以静态分配给给定的类(即可以强制转换为它)。

选项三与二相同,但使用反射 API。只有在进行动态输入时才需要这个。内置的instanceof可读性更强,应该更有效率。

于 2012-07-18T13:58:12.490 回答