Отражение Java, получение и добавление метода - PullRequest
0 голосов
/ 26 января 2012

Я написал программу, и она должна запросить метод, который нужно использовать (я использую java.lang.StringBuffer.append), затем она должна сказать, сколько параметров ей нужно, максимум, в данном случае это 3.Пользователь может ввести столько аргументов, сколько ему нужно, для всех строк, затем программа добавляет их и выводит строку.Но что-то не так, и я просто не нахожу ошибку.

import java.lang.reflect.*;

import tio.*;
public class MethodExecutor {
    public static void main(String [] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException
    {
        String input = "";
        String input1 = "";
        String input2 = "";
        String argumenten[];
        int aantal = 0;
        System.out.println("What method to invoke?");
        input = Console.in.readLine();

        input1 = input.substring(0,input.lastIndexOf("."));
        input2 = input.substring(input.lastIndexOf(".")+1,input.length());
        System.out.println(input2);

        Class<?> c = Class.forName(input1);
        Method m = c.getMethod(input2, null);
        Class<?>[] parameterTypes = m.getParameterTypes();

        System.out.println("Needs max " + parameterTypes.length + " parameters.");
        System.out.println("How many will you provide?");
        aantal = Console.in.readInt();
        argumenten = new String[aantal];
        for(int i = 0; i < argumenten.length; i++)
            argumenten[i] = Console.in.readLine();

        System.out.println("Success");

        }
}

Tio - просто библиотека для получения консольного ввода.

Может ли кто-нибудь помочь, пожалуйста?

С уважением,

1 Ответ

2 голосов
/ 26 января 2012

Я думаю, что это ...

Method m = c.getMethod(input2, null);

... будет искать метод с именем, хранящимся в input2, который не принимает аргументов.

Вместо этого я думаю, что вам нужно искать КАЖДЫЙ метод в классе, а затем распечатывать длины тех, у которых совпадают имена

(из javadoc getMethod :)*

Возвращает объект Method, который отражает указанный открытый метод-член класса или интерфейса, представленного этим объектом Class.Параметр name представляет собой строку, определяющую простое имя нужного метода.Параметр parameterTypes - это массив объектов Class, которые идентифицируют формальные типы параметров метода в объявленном порядке.Если параметр typeTypes имеет значение null, он обрабатывается так, как если бы он был пустым массивом.

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