Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по рефлексии и поиску подходящего метода / 9 сообщений из 9, страница 1 из 1
09.11.2012, 13:54:26
    #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
09.11.2012, 14:38:03
    #38031842
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по рефлексии и поиску подходящего метода
Igor-65Есть ли нечто проще ?неа
тока getMethods и там - isAssignableFrom
...
Рейтинг: 0 / 0
09.11.2012, 14:48:24
    #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
09.11.2012, 14:58:50
    #38031883
0FD
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
09.11.2012, 15:09:22
    #38031899
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по рефлексии и поиску подходящего метода
to grasoff.net : СПАСИБО!
...
Рейтинг: 0 / 0
09.11.2012, 15:11:35
    #38031903
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по рефлексии и поиску подходящего метода
0FD,

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

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


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

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

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


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