Отражение Java - проверка назначается из метаданных класса - PullRequest
0 голосов
/ 01 мая 2018

хорошо - я хожу по дереву ресурсов в поисках классов, которые расширяют определенный суперкласс, возможно, не напрямую - у меня есть код, который работает, но мне нужно разрешить конкретный класс, и я Мне просто интересно, возможно ли то же самое без фактического разрешения класса - вот моя рабочая функция:

 private static <T> boolean checkInherits(Class<T> superClass, ClassMetadata classInformation)
{
    try
    {
        Class<?> theClass = Class.forName(classInformation.getClassName());
        return superClass.isAssignableFrom( theClass );
    }
    catch (Throwable theException)
    {
        return false;
    }
}

Итак, возможно ли это сделать без использования class.forName ()? т.е. прямо из метаданных класса?

1 Ответ

0 голосов
/ 02 мая 2018

Нет пути. Класс (не final) Foo не может "знать" обо всех его (прямых или косвенных) подклассах, потому что любой может создать класс, который расширяет Foo. Следовательно, вы можете узнать об отношениях подкласса только тогда, когда у вас есть оба Class объекта.

Предполагая, что ClassMetadata из среды Spring ( javadoc ), вы могли бы использовать .getSuperClassName(), чтобы получить представление String суперкласса, но это не так решить вашу проблему, если отношения подкласса не являются прямыми. Единственный способ получить объект Class из ClassMetadata - использовать Class.forName(classInformation.getClassName()), точно так же, как вы уже сделали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...