#java #reflection
#java #отражение
Вопрос:
Есть ли способ узнать, является ли тип собственным из среды Java?
Комментарии:
1. В чем разница между JavaType и UserType? Тип, разработанный и упакованный Sun / Oracle? Если вы можете дать точное различие, должно быть возможно сделать это программно.
2. ДА. Я имею в виду классы Java, поставляемые с JVM.
Ответ №1:
Не со 100% уверенностью, нет. Вы могли бы проверить, начинается ли имя пакета с «java», но это легко подделать в большинстве сред. В некоторых JVM вы можете проверить, равен ли classloader для класса null; для системных классов это будет null.
Комментарии:
1. 1 — Тест для
null
загрузчика классов фактически проверяет, является ли загрузчик классов «загрузчиком классов bootstrap». Вы можете запустить JVM с дополнительными JAR-файлами в bootstrap classpath … но это фактически делает классы в этих файлах JAR системными классами.2. java, javax, org.omg, org.xml , org.w3c и org.ietf в соответствии с моими Javadocs. Для быстрого и грязного решения это может быть нормально, но это небезопасно на будущее или не устойчиво к мошенничеству. 🙂
3. Большое вам спасибо. Этот код отлично работает для моего приложения: общедоступный логический isUserType(Class<?> clazz) { возвращает clazz.getClassLoader() == null ? false : true; }
4. @CelinHC: Я не могу удержаться от предложения, чтобы вы просто написали следующее вместо этого: общедоступный логический isUserType(класс<?> clazz) { верните clazz.getClassLoader() != null; }
5. @Ernest: Как пожелаете. Спасибо!