есть ли способ узнать, какой конкретный объект доступен JVM или нет, прежде чем он выкинет ClassNotFoundException
, чтобы мы могли пропустить этот доступ класса и можем использовать класс-заменитель во время выполнения.Как узнать, доступен ли конкретный класс JVM или нет?
ответ
Никто не говорил об этом, потому что для описанной проблемы, ловя ClassCastException действительно является лучшим способом ... однако ...
Если все, что вам нужно сделать, это проверка на существование файла .class на classpath, а затем попытка захвата класса в качестве ресурса может работать.
URL u = getClass().getResource("/java/util/List.class");
загрузчиков классов, которые, по какой-либо причине, не загружать свои классы из достижимых ресурсов будет означать класс не будет найден, но большинство стандартных классов погрузчиков позволит эту работу. Я упоминаю об этом, потому что когда он работает, у вас есть дополнительная возможность видеть, где именно находится файл .class на диске.
Также обратите внимание, что это проверяет наличие файла класса. Он может присутствовать и оставаться незагружаемым (например, если классы, требуемые этим классом, не найдены). –
У вас есть соответствующий код? Не зная точно, что вы пытаетесь сделать, я бы сказал:
Вы должны быть в состоянии убедиться, что все классы, которые вы ссылающиеся на ваши классах раньше время.
Если вам нужно, вы можете просто поймать исключение ClassNotFound, где вы ожидаете, что это может произойти, а затем повторите попытку с другим типом.
У меня нет образца кода. Но у меня есть сценарий, где у меня есть db2, а также оракул DB для доступа, где, если я не нахожу класс db2driver, я использую oracle или vice-versaw. надеюсь, что я понял – GuruKulki
Конечно, но откуда, откуда эти драйверы? У вас есть они? Можете ли вы поместить их в путь класса? – danben
Я думаю, вам следует реализовать решение в обработчике исключений для исключения ClassNotFoundException.
Как вы хотите определить, доступен ли класс во время выполнения, нет способа узнать его перед выполнением программы.
Невозможно спросить загрузчика классов или вызвать Class.forName() без получения исключения, но это не повредит, если это происходит только во время init. Единственная возможность - проверить путь класса для db-jar в файловой системе. Но это было бы слишком большой работой для небольшой (или вообще нет) пользы.
- 1. Как узнать, доступен ли конкретный пользователь Twitter или нет?
- 2. Как узнать, доступен ли адрес в ядре Linux или нет?
- 3. Проверьте конкретный JSON объект доступен или нет
- 4. Как узнать, доступен ли просмотр внутри прокрутки полностью или нет
- 5. Как узнать, был ли класс инициализирован или нет?
- 6. Как узнать, занят ли конкретный видеофайл (.mp4) или нет?
- 7. API или класс, чтобы узнать, включен ли HotSpot или нет?
- 8. Проверьте конкретный JSON объект доступен или нет в PHP
- 9. Как узнать, доступен ли AUCTeX?
- 10. Как узнать, доступен ли фрагмент?
- 11. Как узнать, доступен ли fastcgi_finish_request()?
- 12. Как узнать конкретный символ присутствует в NSString или нет?
- 13. Как можно узнать, доступен ли MediaRecorder.AudioSource.VOICE_RECOGNITION
- 14. Сессия Доступен или нет
- 15. Как узнать, доступен ли класс/метод с помощью отражения?
- 16. Можно ли пересечь класс, чтобы узнать, имеет ли класс или любая его база конкретный признак?
- 17. Как узнать, было ли загружено изображение или нет? - Paperclip
- 18. Как проверить, доступен ли IP-адрес или нет?
- 19. Как узнать, отмечен ли флажок или нет?
- 20. Как узнать, заблокирован ли NSDocument или нет?
- 21. Как узнать, жив ли клиент или нет
- 22. Как узнать, играет ли песня или нет?
- 23. Как узнать, успешна ли логина или нет?
- 24. Как узнать, завершено ли намерение или нет?
- 25. Как узнать, закрыт ли JDialog или нет?
- 26. Как узнать, работает ли служба или нет
- 27. Как узнать, обучена ли сеть или нет?
- 28. Как узнать, заблокирован ли QMutex или нет?
- 29. Как узнать, минимизировано ли окно или нет?
- 30. Как узнать, прочитано ли сообщение или нет
Можете ли вы не просто поймать 'ClassNotFoundException'? Но я думаю, что у вас есть более глубокие архитектурные проблемы, если вы это делаете. Изучите Google Guice (http://code.google.com/p/google-guise/) или Spring IoC (http://www.devshed.com/c/a/Java/The-Spring-Framework-Understanding- IoC /) ... вы, вероятно, найдете их очень полезными. –