Вы на самом деле не имеют никакого выбора, кроме как использовать Class
объекты в массиве, Class<?>[] array = new Class<?>[10]
, а затем вызвать статический метод рефлекторно, например,
array[i].getMethod("staticMethod", ArgType1.class, ArgType2.class)
.invoke(null, arg1, arg2);
Учитывая указанную цель, это самое близкое приближение, доступное на Java. Вы не можете иметь нижний регистр-c class
es, который хранится как переменные или как данные в массивах.
EDIT: Учитывая вашу заявленную цель сравнения эффективности алгоритмов сортировки, тогда накладные расходы отразились бы на этих результатах неприятно. Вам лучше найти другой способ написать это, а не то, что вы пытаетесь сделать с массивом классов, что не будет работать.
, если вы находитесь в Java 8, то я бы, наверное, написать что-то вроде
List<Consumer<int[]>> sorters = Arrays.asList(
Sort1::sort, Sort2::sort, Sort3::sort);
for (Consumer<int[]> sorter : sort) {
int[] array = createNewRandomArray();
sorter.accept(array);
}
Если это не так, то я бы написать что-то вроде
enum SortingVariant {
SORT1 {
@Override void sort(int[] array) { Sort1.sort(array); }
},
SORT2 {
@Override void sort(int[] array) { Sort2.sort(array); }
};
abstract void sort(int[] array);
}
for (SortingVariant sorter : SortingVariant.values()) {
sorter.sort(getNewRandomArray());
}
В обоих случаях ключевая цель состоит в том, чтобы создать список объектов, которые реализуют известный метод, который можно использовать для сортировки, вместо того, чтобы волшебным образом создавать список классов и вызывать метод, который имеет одно и то же имя в каждом из них.
Я также должен добавить базовую функцию к типу массива, например: class 'SuperClass {public static void staticMethod() {}}', но я попытался сделать это с классом класса, и он не удался из-за 'Class' объявляется' final'. – rasnauf
Я должен задаться вопросом, может ли это быть [проблема XY] (http://mywiki.wooledge.org/XyProblem). Какова общая проблема, которую вы пытаетесь решить с помощью этой конструкции? –
Насколько я знаю, вы не можете полиморфно обращаться к методу класса, не объявляя метод в базовом классе. Я не могу сделать это в классе. – rasnauf