Параметры Java-функции - PullRequest
       10

Параметры Java-функции

23 голосов
/ 14 апреля 2010

У меня есть функция, которая принимает переменное количество параметров:

foo (Class... types);

В котором я получаю определенное количество типов классов. Далее я хочу иметь функцию

bar( ?? )

Он также принимает переменное число параметров и сможет проверить, что переменные имеют то же число (это просто) и того же типа (сложная часть), как указано в foo.

Как я могу это сделать?

Редактировать: , чтобы уточнить, вызов может быть:

foo (String.class, Int.class);
bar ("aaa", 32); // OK!
bar (3); // ERROR!
bar ("aa" , "bb"); //ERROR!

Кроме того, foo и bar являются методами одного и того же класса.

1 Ответ

38 голосов
/ 14 апреля 2010

Примерно так:

private Class<?>[] types;

public void foo(Class<?>... types)
{
    this.types = types;
}

public boolean bar(Object... values)
{
    if (values.length != types.length)
    {
        System.out.println("Wrong length");
        return false;
    }
    for (int i = 0; i < values.length; i++)
    {
        if (!types[i].isInstance(values[i]))
        {
            System.out.println("Incorrect value at index " + i);
            return false;
        }
    }
    return true;
}

Например:

test.foo(String.class, Integer.class);
test.bar("Hello", 10); // Returns true
test.bar("Hello", "there"); // Returns false
test.bar("Hello"); // Returns false

(Очевидно, вы захотите изменить способ представления результатов ... возможно, с использованием исключения для неверных данных.)

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