Скорее всего, это невероятно неэффективный, раздутый, неудобный способ сделать то, что вы пытаетесь достичь, и, надеюсь, уже есть готовый, единственный способ сделать это ... но он должен работать .
По сути, просматривайте все классы в пути к классам, пока не найдете класс, в котором getSimpleName()
соответствует имени класса, который у вас есть.
Я рекомендую взглянуть на Google Classpath Explorer , чтобы помочь разобраться в этом.
Это может выглядеть примерно так:
ClassPath classpath = new ClassPathFactory().createFromJVM();
RegExpResourceFilter regExpResourceFilter = new RegExpResourceFilter(".*", ".*\\.class");
String[] resources = classpath.findResources("", regExpResourceFilter);
resources
- это массив строк, например 'com / foo / bar / Baz.class'. Теперь вы можете просто перебрать и найти подходящие записи и преобразовать их из косой в пунктирную, вырезать «.class» и т. Д. Просто будьте осторожны, пытаясь сопоставить внутренние классы, поскольку в них будет символ «$».
Кроме того, насколько мне известно, это НЕ приведет к загрузке этих классов.