在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);
这是可能的,如果可以,怎么样?
答案 0 :(得分:1)
来自JavaDoc for Method
单独的参数会自动解包以匹配原始形式参数,并且原始参数和参考参数都会根据需要进行方法调用转换。
所以你应该能够将它包装在Integer对象周围并调用它。这应该有用。