参数为varargs时的Class.getMethod

时间:2011-04-15 05:36:29

标签: java reflection variadic-functions

我需要调用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 个答案:

答案 0 :(得分:27)

您需要提供数组类型:

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

基本上,varargs参数一个数组,只需要额外的元数据告诉编译器允许将该数组指定为元素序列而不是单个表达式。