Как в метод передать объект неизвестного типа? Имеем интерфейс: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
210 +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 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир