Какое ключевое слово помогает определить подкласс?

1
obj instanceof Arrays

было бы obj знать, является ли obj экземпляром Arrays, но что я хочу знать, если какой оператор использовать, если obj является подклассом Arrays?

Предположим, что класс Animal - это суперкласс Dog.

Dog d = new Dog().

если (dog ", какой оператор?" Animal) приведет к true?

  • 0
    Во время компиляции у вас уже есть эта информация. Во время выполнения у вас будут объекты Class для каждого типа. Это то, что вы хотите / работаете?
  • 0
    Только что получил ответ здесь: stackoverflow.com/questions/7313559/…
Показать ещё 2 комментария
Теги:
subclass
instanceof

3 ответа

3
Лучший ответ

instanceof вернет true и для подклассов. Экземпляр Dog также является экземпляром Animal.

2

См. isAssignableFrom()

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

вернет вам true если Dog является дочерней Animal (либо распространяется, либо реализуется)

это поможет вам, если у вас есть тип, определенный во время выполнения, если он установлен для проверки типа, то вы можете использовать instanceof operator

также при использовании этого метода обязательно обработайте null

  • 0
    Если вы хотите убедиться, что класс dog является исключительно дочерним классом Animal вы должны сказать Animal.class.isAssignableFrom(dog.getClass()) && !dog.getClass().isAssignableFrom(Animal.class)
  • 0
    isAssignableFrom() является ни ключевым словом, ни оператором. Кроме того, то, что вы написали, в основном эквивалентно dog instanceof Animal - исключение, если dog null , что, в зависимости от вопроса, не
1

Решение Jigar, вероятно, лучше всего, но вы, вероятно, могли бы сделать это так:

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

Это вернет true, если класс dog является дочерним элементом Animal но не является экземпляром Animal для базового уровня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню