Как узнать, доступен ли конкретный класс JVM или нет? - PullRequest
0 голосов
/ 21 января 2010

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

Ответы [ 4 ]

3 голосов
/ 21 января 2010

Можете ли вы показать соответствующий код? Не зная точно, что вы пытаетесь сделать, я бы сказал:

  1. Вы должны быть в состоянии заранее убедиться, что все классы, на которые вы ссылаетесь, находятся на вашем пути к классам.

  2. Если вам нужно, вы можете просто перехватить исключение ClassNotFound там, где вы ожидаете его возникновения, а затем повторить попытку с другим типом.

1 голос
/ 24 января 2010

Никто не упомянул об этом, потому что для описанной проблемы перехват ClassCastException действительно лучший способ ... однако ...

Если все, что вы хотите сделать, это проверить наличие файла .class на пути к классам, тогда попытка получить класс как ресурс может сработать.

URL u = getClass().getResource( "/java/util/List.class" );

Загрузчики классов, которые по какой-либо причине не загружают свои классы из доступных ресурсов, будут означать, что класс не будет найден, но большинство стандартных загрузчиков классов разрешат эту работу. Я упоминаю об этом, потому что, когда он работает, у вас есть возможность видеть, где именно находится файл .class на диске.

1 голос
/ 21 января 2010

Я думаю, вам следует реализовать решение в обработчике исключений для исключения ClassNotFoundException.

Поскольку вы хотите определить, доступен ли класс во время выполнения, нет способа выяснить его перед выполнением программы.

0 голосов
/ 21 января 2010

Невозможно запросить загрузчик классов или вызвать Class.forName () без получения исключения, но это не повредит, если это происходит только во время init.Единственная возможность - проверить путь к классам для db-jar в файловой системе.Но это было бы слишком много работы для небольшой (или нет) выгоды.

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