【问题标题】:Which keyword in helps to determine subclass?哪个关键字有助于确定子类?
【发布时间】:2014-07-08 23:42:06
【问题描述】:
obj instanceof Arrays

将有助于知道obj 是否是Arrays 的实例,但我想知道如果objArrays 的子类,使用什么运算符来查找?

假设类 Animal 是 Dog 的超类。

Dog d = new Dog().

如果 (dog "which operator ? " Animal) 将导致 true

【问题讨论】:

  • 在编译时,你已经有了这些信息。在运行时,每种类型都有Class 对象。这是你想要/正在使用的吗?
  • 你的意思是如果obj是Arrays子类的实例
  • @SotiriosDelimanolis 是的

标签: java subclass instanceof


【解决方案1】:

instanceof 也将为子类返回 true。 Dog 的实例也是Animal 的实例。

【讨论】:

    【解决方案2】:

    isAssignableFrom()

    Animal.class.isAssignableFrom(dog.getClass())
    

    如果DogAnimal 的子级(扩展或实现),将返回true

    如果您在运行时确定了类型,这将对您有所帮助,如果已固定检查类型,那么您可以使用 instanceof 运算符

    在使用此方法时,请确保处理null

    【讨论】:

    • 如果你想确保 dog 的类是 Animal 的子类,那么你想说Animal.class.isAssignableFrom(dog.getClass()) && !dog.getClass().isAssignableFrom(Animal.class)
    • isAssignableFrom() 既不是关键字也不是运算符。此外,您所写的内容大多等同于dog instanceof Animal - 例外情况是dognull,根据问题,它不是
    【解决方案3】:

    Jigar 的解决方案可能是最好的,但您也可以这样做:

    dog instanceof Animal && !dog.getClass().equals(Animal.class)
    

    仅当 dog 的类是 Animal 的子类但不是基本级别的 Animal 实例时才会返回 true。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      相关资源
      最近更新 更多