如何循环调用方法并每次传入不同类实例以简化代码?
如何简化重复调用类实例方法的Java代码?
我现在有一段重复的Java代码,需要调用57个类实例的myPanel.setVisible()方法,代码如下:
public void myMethod() { instance1.myPanel.setVisible(); instance2.myPanel.setVisible(); instance3.myPanel.setVisible(); instance4.myPanel.setVisible(); //A bunch more instance57.myPanel.setVisible(); }
我想简化这段代码,尝试了下面的思路(虽然代码无法运行,但能体现我的需求):
public void myMethod2(myClass instance1) { instance1.myPanel.setVisible(); } int i = 1; while(i <= 57) { myMethod2("instance" + i); i++ }
请问有没有办法通过循环执行某个方法,每次传入不同的类实例来实现?
可行的解决方案
推荐方案:用集合存储实例后遍历调用
把所有需要操作的实例提前存入集合(比如List或数组),然后通过循环遍历集合来调用方法,这是最规范易维护的做法:// 先在类中定义存储实例的集合(初始化时填充所有实例) private List<myClass> instances = Arrays.asList(instance1, instance2, ..., instance57); public void myMethod() { for (myClass instance : instances) { instance.myPanel.setVisible(); } }后续如果要新增或删除实例,只需要修改集合内容即可,不用改动循环逻辑。
特殊场景方案:使用反射(不推荐)
如果实在无法提前整理实例集合,可以用反射通过字段名获取实例,但这种方式会降低代码可读性、影响性能,还需要处理异常,仅建议在特殊场景下使用:public void myMethod() { for (int i = 1; i <= 57; i++) { try { // 替换成当前包含这些instance字段的类名 Field field = YourCurrentClass.class.getDeclaredField("instance" + i); field.setAccessible(true); // 若字段为私有需开启访问权限 myClass instance = (myClass) field.get(this); instance.myPanel.setVisible(); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者Gareth
相关产品推荐
相关产品推荐

