powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по рефлексии и поиску подходящего метода
9 сообщений из 9, страница 1 из 1
Вопрос по рефлексии и поиску подходящего метода
    #38031765
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

допустим, есть классы
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class A {
};
public class B {
};
public class C {
};
public class A1 extends A{
};
public class B1 extends B{
};
public class B2 extends B1{
};


public class Test {
    public void set(A a, B b) { ... };
    public void set(A a, C b) { ... };
}



Задача: найти в классе Test и выполнить метод set для параметров типа A1, B2

попытка найти метод
Код: java
1.
2.
3.
4.
    Class cl_test = Class.forName("Test");
    Class cl_a = Class.forName("A1");
    Class cl_b = Class.forName("B2");
    cl_test.getMethod("set",cl_a,cl_b);


ругается java.lang.NoSuchMethodException.

cl_test.getMethod("set",A,B); - ищет нормально.

Как найти подходящий метод ?
Варианты обхода представляю
- переопределить класс Test, добавив метод set(Object,Object) и в нем разбираться с помощью instanceof
- перебирать все методы и проверять имена всех родителей параметров

Есть ли нечто проще ?
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38031842
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-65Есть ли нечто проще ?неа
тока getMethods и там - isAssignableFrom
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38031865
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м, вот

Код: 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.
25.
26.
27.
28.
29.
    public static Method getMethod(Class<?> cl, String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException {
        try {
            return cl.getMethod(name, parameterTypes);
        } catch (NoSuchMethodException e) {
            // it's ok
        }
        for (Method method : cl.getMethods()) {
            if (!method.getName().equals(name)) {
                continue;
            }
            Class<?>[] methodParameterTypes = method.getParameterTypes();
            boolean found = true;
            for (int i = 0, l = methodParameterTypes.length; i < l; i++) {
                if (!methodParameterTypes[i].isAssignableFrom(parameterTypes[i])) {
                    found = false;
                    break;
                }
            }
            if (found) {
                return method;
            }
        }

        throw new NoSuchMethodException(cl.getName() + "." + name + argumentTypesToString(parameterTypes));
    }

    private static String argumentTypesToString(Class[] argTypes) {
        // copy/paste java.lang.Class#argumentTypesToString
    }
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38031883
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,

а вот так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Test {
    public void set(A a, B b) { ... };
    public void set(A a, C b) { ... };
    
    public void set(A a, B1 b) { ... };
    public void set(A1 a, B1 b) { ... };
    public void set(A a, B2 b) { ... };
    public void set(A1 a, B2 b) { ... };
}
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38031899
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to grasoff.net : СПАСИБО!
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38031903
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0FD,

если бы кол-во наследников было только таким - не вопрос :)
но их существенно больше... и могут добавляться ...
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38031945
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-650FD,

если бы кол-во наследников было только таким - не вопрос :)
но их существенно больше... и могут добавляться ...


Вопрос не о кол-во наследников, а о количестве методов(вот этот лишний public void set(A1 a, B2 b) { ... };)
вот таким параметрам A1, B2 соответствует 4 метода. Да я просто так, если много наследников, почему не может и много методов.
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38031973
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FDа вот такну, допиши уже сам
не маленький жеж
...
Рейтинг: 0 / 0
Вопрос по рефлексии и поиску подходящего метода
    #38032205
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to 0FD

0FDВопрос не о кол-во наследников, а о количестве методов(вот этот лишний public void set(A1 a, B2 b) { ... };)
вот таким параметрам A1, B2 соответствует 4 метода. Да я просто так, если много наследников, почему не может и много методов.
Очень не хочется впоследствии лезть сюда и добавлять методы ...
Вариант, предоставленный grasoff.net меня полностью устраивает.
Еще раз ему СПАСИБО !

Только сегодня начав копать этот раздел я бы еще не скоро нашел isAssignableFrom и для чего это надо ... :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по рефлексии и поиску подходящего метода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]