Является ли JavaType (класс class) или isUserType (класс class)?

#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: Как пожелаете. Спасибо!