Class.getMethod, когда параметр varargs - PullRequest
17 голосов
/ 15 апреля 2011

Мне нужно вызвать Class.getMethod (java.lang.String, java.lang.Class ...) , чтобы получить метод, в котором один из параметров varargs - это varargs.

В настоящее время я пытаюсь:

// to get jdbcTemplate.queryForObject(RowMapper, Object...)
jdbcTemplate.getClass().getMethod("queryForObject", RowMapper.class, Object.class);

Что не удивительно, что

Caused by: java.lang.NoSuchMethodException: org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForObject(java.lang.String,     org.springframework.jdbc.core.RowMapper, java.lang.Object)
at java.lang.Class.throwNoSuchMethodException(Class.java:283)
at java.lang.Class.getMethod(Class.java:825)

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

1 Ответ

27 голосов
/ 15 апреля 2011

Вместо этого необходимо указать тип массива:

getMethod("queryForObject", RowMapper.class, Object[].class);

В основном параметр varargs - это массив, только с дополнительным битом метаданных, сообщающим компилятору, что этот массив долженуказывается как последовательность элементов вместо одного выражения.

...