Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8

ArrayList список классов - как в цикле получить мои классы и вызывать их статичный метод

29.12.2019, 22:42. Показов 1527. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Есть некий класс

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MyClass<T> {
    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<MyClass>> list = new ArrayList<>();
        list.add(MyClass.class);
        for (Class<MyClass> c: list) {
            System.out.println("c = " + (MyClass) c.foo); //так не компилирует. Как получить все MyClass'ы из list'a и вызвать у них статичный метод foo?
        }
}
Как получить все MyClass'ы из list'a и вызвать у них статичный метод foo?

Добавлено через 20 минут
для большего понимания что требуется - расширю описание вопроса

Есть некий класс

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2019, 22:42
Ответы с готовыми решениями:

Как получить список классов в пакете?
Есть пакет, некоторые классы в нем помечены аннотацией. Задача - вытащить все помеченные классы, зная только имя пакета, как это делает...

Как реализовать не статичный метод?
Господа, всем доброго времени. Передо мной стоит такая задача: Задан массив произвольной длины. Вывести 2 числа, первое - сумма четных...

Как получить список встроенных и пользовательских классов
В php есть функция, которая возвращает массив со списком всех &quot;доступных&quot; классов. Длина этого списка зависит от набора подключённых и...

16
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
30.12.2019, 00:30
Java
1
2
3
4
5
6
        for (Class<?> c: list)
            try {
                c.getMethod("foo").invoke(null);
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                e.printStackTrace();
            }
0
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8
30.12.2019, 00:41  [ТС]
Цитата Сообщение от vcrop Посмотреть сообщение
for (Class<?> c: list)
            try {
                c.getMethod("foo").invoke(null);
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                e.printStackTrace();
            }
vcrop, спасибо за ответ. А возможен ли вариант решение задачи именно через приведения к класс-типу?
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
30.12.2019, 01:14
Наверное, нет. У объекта Class нет метода foo.
https://docs.oracle.com/en/jav... Class.html
0
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8
30.12.2019, 01:52  [ТС]
Цитата Сообщение от vcrop Посмотреть сообщение
Наверное, нет. У объекта Class нет метода foo.
Отсутствие в Class метода foo с этим все понятно - метод foo это метод моего MyClass.
В нашем примере в цикле переменная c у нас типа Class<?> - если бы эту переменную можно было бы привести к класс-типу MyClass, то получилось бы и вызвать static foo
0
 Аватар для sdasdaw
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
30.12.2019, 02:17
javalx, вы какую-то чепуху пытаетесь намутить

Java
1
2
3
4
5
6
new ArrayList<Class<? extends MyClass>>() {{ add(MyClass.class); add(MyClass2.class); }}
    .forEach(e -> {
        try {
            ((MyClass) e.newInstance()).foo();
        } catch (InstantiationException | IllegalAccessException ignored) { }
    });
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
30.12.2019, 02:34
Цитата Сообщение от sdasdaw Посмотреть сообщение
javalx, вы какую-то чепуху пытаетесь намутить
Ему не надо инстанса.
Он пытается сделать что-то типа
Java
1
Integer.class.valueOf()
.
0
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8
30.12.2019, 10:34  [ТС]
Цитата Сообщение от vcrop Посмотреть сообщение
Ему не надо инстанса.
Он пытается сделать что-то типа
Ага
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
30.12.2019, 11:50
Цитата Сообщение от javalx Посмотреть сообщение
Ага
Это так не работает.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.12.2019, 11:57
clazz.getMethod(...)
method.invoke(...)
Но скорее всего ты что-то делаешь неправильно, раз тебе понадобилось это
1
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8
30.12.2019, 13:11  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
Но скорее всего ты что-то делаешь неправильно, раз тебе понадобилось это
Это не в конкретной задаче - просто хотел узнать возможно ли это сделать через приведение класс-типа
0
 Аватар для Aviz__
2739 / 2048 / 507
Регистрация: 17.02.2014
Сообщений: 9,467
30.12.2019, 13:17
javalx, а как ты придумываешь, задачи на исследование?
0
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8
30.12.2019, 13:24  [ТС]
Цитата Сообщение от Aviz__ Посмотреть сообщение
javalx, а как ты придумываешь, задачи на исследование?
Сам не знаю Откровенно говоря только постигаю эко-систему Java (до этого больше 15 лет занимался desktop-разработками на другом языке)
0
 Аватар для Aviz__
2739 / 2048 / 507
Регистрация: 17.02.2014
Сообщений: 9,467
30.12.2019, 13:35
javalx, понятно, по наитию, значит))
0
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8
30.12.2019, 13:46  [ТС]
Цитата Сообщение от Aviz__ Посмотреть сообщение
по наитию
прошу прощения, не разобрал - что значит "по наитию"
0
30.12.2019, 13:51

Не по теме:

Цитата Сообщение от javalx Посмотреть сообщение
что значит "по наитию"
По наитию - значит интуитивно. Можно сказать подсказывает внутренний голос.

0
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 8
30.12.2019, 17:43  [ТС]
Цитата Сообщение от Aviz__ Посмотреть сообщение
По наитию - значит интуитивно. Можно сказать подсказывает внутренний голос.
Ok!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.12.2019, 17:43
Помогаю со студенческими работами здесь

Как получить список всех производных классов?
Исходные данные: Имеется произвольный набор производных классов от MyClass: class MyClass1 : MyClass ... class MyClassXXX : MyClass...

Как можно получить список пользователей для обработки в цикле?
Здравствуйте. Как я могу получить список пользователей для обработки в цикле? #!/bin/sh #Get list of all important users ...

Как правильней написать статичный метод?
Вот код, но он ругается на $this: Fatal error: Using $this when not in object context in. class db { public $db; public...

Как проверить в цикле все мои define?
#define MASK_0001 (unsigned int)(1) #define MASK_0010 (unsigned int)(2) #define MASK_0100 (unsigned int)(4) #define MASK_1000...

Ввести строки из файла, записать в список ArrayList. Выполнить сортировку строк, используя метод sort()
Ввести строки из файла, записать в список ArrayList. Выполнить сортировку строк, используя метод sort().


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru