Ваш подход хорош - действительно, это, вероятно, самый простой и эффективный подход.
Если вы хотите избежать предупреждения компилятора, вы можете добавить аргумент универсального типа следующим образом:
Class<?>[] possibleClasses = new Class[]{Class1.class, Class2.class}
Однако это просто дает вам другое предупреждение (неконтролируемое преобразование), так что вы можете просто подавить исходное предупреждение напрямую.
Несколько более сложный альтернативный подход состоит в использовании отражения для обхода иерархии классов и автоматического добавлениявсе подклассы вашего базового класса в ArrayList классов.Преимущество состоит в том, что вам не нужно явно перечислять все подклассы по отдельности, и он будет автоматически подбирать все новые добавленные подклассы.