Как в метод передать объект неизвестного типа? Имеем интерфейс:public interface Sorter {
void sort(Integer[] array);
}
И несколько классов, имплементирующих данный интерфейс:public class BubbleSort implements Sorter{...}
public class MergeSort implements Sorter{...}
public class QuickSort implements Sorter {...}
public class ShellSort implements Sorter{...}
Хочу написать класс для тестирования скорости работы алгоритмов, нем описать метод, скажем testSortMethod, который принимал бы любой из объектов класса, описанных выше и вызывал бы у них метод sort . Желательно это делать в цикле, то есть положить все объекты в массив и по очереди передавать их методу testSortMethod. Реально ли это сделать и как?

21 Авг 2019 в 07:03
234 +1
0
Ответы
1

Да, это возможно сделать с помощью использования рефлексии в Java. В методе testSortMethod вы можете передать объект типа Sorter и вызвать метод sort для этого объекта, не зная его конкретного класса. Вот пример реализации такого метода:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SortTester {
public void testSortMethod(Sorter sorter) {
Integer[] array = {4, 2, 5, 1, 3}; // Пример массива, который будет сортироваться
try {
Method sortMethod = sorter.getClass().getMethod("sort", Integer[].class);
sortMethod.invoke(sorter, (Object)array);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Sorter[] sorters = {new BubbleSort(), new MergeSort(), new QuickSort(), new ShellSort()};
SortTester tester = new SortTester();
for (Sorter sorter : sorters) {
tester.testSortMethod(sorter);
}
}
}

В этом примере мы создали метод testSortMethod, который принимает объект типа Sorter и использует рефлексию для вызова метода sort этого объекта. В методе main мы создаем массив объектов, имплементирующих Sorter, и вызываем testSortMethod для каждого из них.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир