2016-12-02 2 views
2

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

Class<?>[] classes = SomeClass.getClasses(); 

Спасибо.

EDIT: Вот код для основного класса.

package game_engine.main; 

public abstract class Main { 
    public static void main(String[]args){ 
     //do something 
    } 
    protected abstract void start(GameSettings settings); 
} 
+1

Определение «каждый класс» –

+0

Не могли бы вы дать некоторое представление о том, почему вы должны это сделать? [XY Problem] (http://xyproblem.info/) – 4castle

+0

Возможный дубликат [Можете ли вы найти все классы в пакете с использованием отражения?] (Http://stackoverflow.com/q/520328/5221149) – Andreas

ответ

0

Нет простого способа сделать это, нет. Это связано с проверкой пути к классам, что невозможно выполнить переносимым образом. Google Guava имеет ClassPath, но он явно говорит, что не использует его для критически важных задач.

0

Я не могу сделать это в однострочном коде. Но это также может помочь:

//scan urls that contain 'my.package', include inputs starting with 'my.package', use the default scanners 
Reflections reflections = new Reflections("my.package"); 

//or using ConfigurationBuilder 
new Reflections(new ConfigurationBuilder() 
.setUrls(ClasspathHelper.forPackage("my.project.prefix")) 
.setScanners(new SubTypesScanner(), 
       new TypeAnnotationsScanner().filterResultsBy(optionalFilter), ...), 
.filterInputsBy(new FilterBuilder().includePackage("my.project.prefix")) 
...); 

деталь: https://github.com/ronmamo/reflections

+0

Я пробовал используя отражения раньше, но он не клонировал git, классы не могли быть импортированы, и intellij не смог импортировать его. Как добавить репозиторий github в проект? –

+0

Вы не используете maven или gradle? –

+0

Нет. Не могли бы вы упомянуть хороший учебник? –