Подтвердить что ты не робот

Параметры вариационной функции Java

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

foo (Class... types);

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

bar( ?? )

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

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

Изменить:, чтобы выяснить, вызов может быть:

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

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

4b9b3361

Ответ 1

Что-то вроде этого:

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

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