通过使用可变数量的参数进行反射来调用方法

时间:2013-10-16 17:58:21

标签: java codeigniter

在CodeIgniter中,当我转到URI example.com/index.php/blog/showitem/253时,它会加载控制器blog并执行方法showitem(253)

使用Java中的Reflection可以实现这样的功能。例如,我有一个方法loadController(String controllerName, String method, Objects args...),它使用正确的方法和可变数量的参数初始化正确的控制器。

我知道我可以从字符串初始化类,调用方法,但我坚持使用可变数量的参数。这就是我现在所拥有的:

public static void switchController(String controllerName, String methodName, Object ... args)
{
try {
    Class controller = Class.forName("director.controllers." + controllerName);
    Method method = controller.getDeclaredMethod(methodName, Object[].class);
    method.invoke(controller.newInstance(), args);

我想要的是我可以使用NewsController方法加载showOne(int id),如下所示:

switchController("NewsController", "showOne", 124);

这是可能的,如果可以,怎么样?

1 个答案:

答案 0 :(得分:1)

来自JavaDoc for Method

  

单独的参数会自动解包以匹配原始形式参数,并且原始参数和参考参数都会根据需要进行方法调用转换。

所以你应该能够将它包装在Integer对象周围并调用它。这应该有用。