int[]参数方法调用失败,如何直接传入多个整数调用该方法?
解决方法:保留int[]参数的同时支持直接传多个数值调用
嘿,这个问题其实是Java方法调用的语法规则导致的——你定义的loadCars参数是int[]类型,但直接写loadCars(377,643,628,614)相当于试图把四个独立的int值传给一个数组参数,Java编译器不会自动帮你把它们打包成数组,所以才会无法生效。
下面给你两种不用改成四个单独int参数的解决办法:
方法1:调用时显式创建int数组
不用修改loadCars方法的定义,只需要在调用的时候手动把数值包装成数组:
loadCars(new int[]{377, 643, 628, 614});
这样编译器就能识别你要传递的是一个int数组,和方法的参数类型完全匹配,自然就能正常执行了。
方法2:使用可变参数(Varargs)兼容两种调用方式
如果你想既支持传数组,又支持直接传多个数值,可以把方法的参数改成可变参数形式。它本质上还是数组,但允许你直接传多个值,不用手动打包:
private void loadCars(int... car) { Json json = new Json(getApplicationContext()); ArrayList<JSONObject> allCars; allCars = json.gettTodosLosJson(); // 原有的代码完全不用改,因为car在这里就是int[]类型 Opcion1.setCustom_Img(json.getIcono(allCars.get(car[0]))); Opcion2.setCustom_Img(json.getIcono(allCars.get(car[1]))); Opcion3.setCustom_Img(json.getIcono(allCars.get(car[2]))); Opcion4.setCustom_Img(json.getIcono(allCars.get(car[3]))); }
这样之后,你既可以用loadCars(new int[]{377,643,628,614})调用,也可以直接用loadCars(377,643,628,614)调用,两种方式都能正常工作。
⚠️ 注意:因为你的代码里直接访问了car[0]到car[3],所以不管用哪种方法,都要确保调用时至少传入4个数值,否则会抛出ArrayIndexOutOfBoundsException。如果担心这个,可以在方法开头加个判断:
if (car == null || car.length < 4) { // 可以抛出异常、打印日志或者做其他处理 throw new IllegalArgumentException("必须传入至少4个数值"); }
内容的提问来源于stack exchange,提问作者Gastón Saillán
相关产品推荐
相关产品推荐

