Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2019, 22:18   #1
javalx
Новичок
Джуниор
 
Регистрация: 29.12.2019
Сообщений: 2
Вопрос ArrayList<Class<MyClass>>в цикле получить MyClass'ы и вызывать их статичный метод

Добрый день!

Есть некий класс
Код:
public class MyClass<T> {
    public static void foo() {
        System.out.println("foo");
    }
}
public class MyClass2 extends MyClass {
    public static void foo() {
        System.out.println("foo");
    }
}

public class Main {

    public static void main(String[] args) { new Main().start(); }

    public void start() {
        ArrayList<Class<? extends MyClass>> list = new ArrayList<>();
        list.add(MyClass.class);
        list.add(MyClass2.class);
        for (Class<? extends MyClass> c: list) {
            //System.out.println("c = " + (MyClass) c.foo);
        }
}
Как получить все MyClass'ы из list'a и вызвать у них статичный метод foo?

Последний раз редактировалось javalx; 29.12.2019 в 22:39.
javalx вне форума Ответить с цитированием
Старый 01.01.2020, 13:37   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Самое простое решение, которое мне пришло в голову:
Код:
public class ClazzOne {
    public static void foo() {
        System.out.println("ClazzOne.foo()");
    }
}

public class ClazzTwo extends ClazzOne {
    public static void foo() {
        System.out.println("ClazzTwo.foo()");
    }
}

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        final List<Class<? extends ClazzOne>> list = new ArrayList<>();
        list.add(ClazzOne.class);
        list.add(ClazzTwo.class);
        for (Class<? extends ClazzOne> clazz : list) {
            try {
                final Method methodFoo = clazz.getMethod("foo");
                methodFoo.invoke(null);
            } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
}
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 06.01.2020, 00:19   #3
javalx
Новичок
Джуниор
 
Регистрация: 29.12.2019
Сообщений: 2
По умолчанию

Спасибо
javalx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить процент запросом в цикле? samorez SQL, базы данных 1 28.05.2018 17:45
Перекрыть статичный метод предка и вызвать приватный метод предка xexxex Общие вопросы Delphi 0 26.09.2016 05:06
Перечисления. Метод GetValue в цикле. BadCats C# (си шарп) 3 06.04.2016 08:18
C# - Как изменить свойство элемента в list? List<MyClass> kvi2994 C# (си шарп) 1 05.03.2015 18:28
Метод вращения Якоби (ошибка в цикле) crawter Помощь студентам 0 14.11.2012 19:43