Как проверить, существует ли указанный тип класса c в цепочке наследования - PullRequest
0 голосов
/ 11 марта 2020

У меня есть класс, который реализует шаблон декоратора. Мне нужно проверить, есть ли указанный класс c в цепочке наследования. Обычно я бы просто использовал instanceof.

Однако у меня нет определения класса во время разработки. Другими словами, я получаю имя класса (как String) во время выполнения. В этой ситуации, как я могу проверить, что данное имя класса появляется в цепочке наследования?

1 Ответ

1 голос
/ 11 марта 2020

Во-первых, звучит ужасно. Отражение, как правило, очень плохая идея.

Редактировать: Как отмечает @Holger в комментариях, динамическая c проверка иерархий типов также является действительно плохой идеей. (Жаль, что для этого появилось несколько новых языковых возможностей. Хо-ха-ха.) В целом, сохраняйте иерархию типов плоской. Но это совершенно новый чайник из sh. По моему опыту, это отражение, которое обычно (не всегда, Credit Suisse!) Подчеркивает и способствует путанице.

Сказав, что: Вам, конечно, понадобится полное имя класса (хотя вы можете проверить последовательность пакетов). Оттуда методы Class.forName позволят вам восстановить объект Class (хотя, если вы используете несколько загрузчиков классов, это может привести к еще более затруднительным последствиям). Тогда вам просто нужно Class.isAssignableFrom.

...