Каковы предлагаемые альтернативы для класса <T>.isAssignableFrom (класс <?> Cls)? - PullRequest
1 голос
/ 16 марта 2010

В настоящее время я выполняю профилирование для фрагмента кода. Во время профилирования я обнаружил, что этот самый вызов метода

Class<T>.isAssignableFrom(Class<?> cls)

занимает довольно много времени.

Поскольку это метод из рефлексии, он занимает много времени по сравнению с обычными ключевыми словами или вызовами методов. Мне интересно, есть ли хорошие альтернативы для вызовов этого метода?

Ответы [ 3 ]

2 голосов
/ 16 марта 2010

Если у вас есть объект, класс которого вы извлекаете, вы можете заменить его на:

obj instanceof ClassName

но я бы не сказал, что это быстрее. На самом деле, я сомневаюсь, что это вызывает какие-либо проблемы с выполнением программы. Не переоптимизируйте.

2 голосов
/ 26 июля 2011

Я не знаю, влияет ли это на вас, но я думаю, что стоит отметить, что в первые дни Java 5 isAssignableFrom имел значительные проблемы с производительностью , которые позже были исправлены. Я не мог найти, было ли исправление перенесено в Java 5, но оно, безусловно, вошло в Java 6.

Кроме того, Вики по производительности Sun JVM указывает, что Class.isInstance и Class.isAssignableFrom являются такими же производительными, как instanceof .

Так что, если вы работаете на Java 6 или более поздней версии, похоже, что для Class.isAssignableFrom альтернативы не будет, что будет быстрее, чем то, что уже есть.

2 голосов
/ 16 марта 2010

"[I] t проверяет тип класса передается через аргумент метода в посмотрите, соответствует ли тип определенному квалификации ".

Для меня это означает, что аргумент метода должен требоваться для реализации конкретного интерфейса или наследования от определенного класса. Имейте в виду, что интерфейс может представлять собой маркер типа RandomAccess . Я понимаю, что изменение вашего API не может быть вариантом.

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