小编Ala*_*ftw的帖子

如何在自动装箱后知道某些东西是原始类型?

我知道有很多关于反射和原始类型的问题,但我并没有真正得到我搜索的确切信息.我的问题如下:我想调用完全动态的方法(通过反射),这意味着我想调用它们,即使我不知道参数的类型.

public Object invoke(Object objectContainingMethod,String methodName, Object...params) {
    Object result = null;
    int length = params.length;
    Class<?>[] paramTypes = new Class<?>[length];

    for(int i=0; i<length; i++) {
        paramTypes[i] = params[i].getClass();
    }

    try {
        Method method = objectContainingMethod.getClass().getMethod(methodName, paramTypes);
        // not hard coded like getMethod(methodName, String.class, int.class, double.class);
        result = method.invoke(objectContainingMethod, params);
    } catch (NoSuchMethodException | SecurityException | 
             IllegalAccessException | IllegalArgumentException | 
             InvocationTargetException e) { 
        e.printStackTrace();
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

(没有优化任何东西,所以请不要讨厌^^)问题是,方法的参数需要在Object中转换但是当我这样做时你不能真正检测到它是否是原始类型因为自动拳击.当我尝试使用int参数从类String调用Method"charAt"时会发生这种情况:

String instance = "hello";
Object result = …
Run Code Online (Sandbox Code Playgroud)

java reflection autoboxing

5
推荐指数
1
解决办法
825
查看次数

标签 统计

autoboxing ×1

java ×1

reflection ×1