Как узнать, принимает ли метод массив как параметр, используя отражение - PullRequest
1 голос
/ 20 июня 2011

Я пытаюсь вызвать API с заданными входными параметрами. Входные параметры приходят в виде списка. Теперь моя работа состоит в том, чтобы получать параметры параметров API один за другим и создавать требуемый экземпляр типа из List. Я могу сделать для простых типов Java, список, набор, но я застрял в массиве.

Method  method = getMethodFromTheClassBasedOnvalues(  loadedClass,   apiName, numberOfParams);
     Type[] apiMethodParams = method.getGenericParameterTypes();
         List<Type> expectedParamTypes = Arrays.asList(apiMethodArgTypes);
     List<Object> actualValues = // method input.

    List<Object> argsList = new ArrayList<Object>();
    for (int i = 0; i < expectedParamTypes.length; i++) {
        argsList.add(castToRequiredType(expectedParamTypes.get(i),
                actualValues.get(i)));

    method.invoke(loadClass.newInstance(), argsList.toArray());

Проблема возникает, когда я получаю метод, имеющий тип API (String, String []), я пытаюсь получить GenericTypes, вызывая method.getGenericParameterTypes (), который возвращает и массив что-то вроде этого [class java.lang.String, class [Ljava.lang.String;] или если один параметр [Ljava.lang.String; Исходя из этого, как бы я узнал, если он принимает Array of String. Я вижу разницу в том, что имя класса начинается после [L и заканчивается; но гарантировано ли это? Будет ли bevhiour таким же для CustomObject [] также?

Есть ли какой-нибудь умный способ узнать, принимает ли метод массив, и построить его в последнее время? Любые мысли в этом направлении помогут.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 20 июня 2011

Попробуйте использовать

Class [] Mehotd.getParameterTypes ()

После этого вы можете вызвать Class.isArray () и определить, является ли этот класс параметров массивом

2 голосов
/ 20 июня 2011

[L означает массив объектов действительно.См. Например здесь .Но лучший способ проверить, представляет ли какой-либо класс массив, - это метод isArray .

1 голос
/ 20 июня 2011

Вы еще не показали, что делает castToRequiredType, но если вам когда-нибудь придется разыграть Type на Class, вы сможете использовать Class.isArray и Class.getComponentType.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...