Java能否动态拼接方法参数名供for循环使用以避免冗余if判断
问题原因
Java是静态编译型语言,不支持运行时通过字符串拼接变量名直接获取对应入参。你代码里"app" + i只会生成值为app1、app2的普通字符串,和你定义的同名方法入参没有任何关联,自然无法完成判空逻辑。另外你原代码有两个明显问题:
- 方法参数定义存在语法错误,第二个参数写为
String, app2,多了冗余逗号,无法通过编译 break语句位置错误,第一次循环就会直接跳出,完全达不到遍历效果
推荐实现方案
方案1:使用可变参数(最灵活,无需写重复判空)
直接用可变参数接收任意个数的字符串入参,遍历处理即可,后续新增参数也不需要修改方法定义:
public StringBuilder applianceReturn(String... apps){ StringBuilder finalString = new StringBuilder(); for (String appliance : apps) { // 同时处理null和空字符串场景,符合常规业务判断逻辑 if (appliance != null && !appliance.trim().isEmpty()){ finalString.append(appliance); } else { finalString.append("nothing"); } } Toast.makeText(getApplicationContext(), finalString.toString(), Toast.LENGTH_SHORT).show(); return finalString; }
调用时和你原来的传参逻辑完全兼容,支持传入任意数量的String参数:
// 传3个参数 applianceReturn(app1, app2, app3); // 后续新增参数直接传即可,不需要改方法代码 applianceReturn(app1, app2, app3, app4, app5);
方案2:保留固定入参的写法
如果受接口限制不能修改入参格式,直接把所有入参先存入数组再遍历即可,同样不需要写重复的if判断:
public StringBuilder applianceReturn(String app1, String app2, String app3){ StringBuilder finalString = new StringBuilder(); String[] appList = {app1, app2, app3}; for (String appliance : appList) { if (appliance != null && !appliance.trim().isEmpty()){ finalString.append(appliance); } else { finalString.append("nothing"); } } Toast.makeText(getApplicationContext(), finalString.toString(), Toast.LENGTH_SHORT).show(); return finalString; }
补充:你原代码里
Toast.makeText第二个参数直接传StringBuilder对象是不对的,需要调用toString()转成字符串,否则会输出对象默认的字符串表示,不符合预期。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

