有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java动态调用现有变量

我有一个java程序,它使用多个HashMaps,一个用于假设餐厅中的每一类订单

我需要做一些处理并将文本输出到文件中。然而,我已经走了“坏”的路,只是写了六次代码,每次调用不同的hashmap

我不能留下确切的演示代码,因为这将作为一个项目交付,因此可能会被随机的剽窃发现者发现,并被错误地标记为剽窃,因为这将是一个巨大的代码块。然而,下面应该可以说明这个问题

DoSomething(These);
DoSomething(All);
DoSomething(Have);
DoSomething(Completely);
DoSomething(Different);
DoSomething(Names);

现在不用“DoSomething”,想象一下有20行代码,每20行我使用一个特定的HashMap

我无法准确地填充数组并使其使用数组中的数据,因为它将尝试使用字符串而不是HashMap(调用DoSomething(“这些”)而不是DoSomething(这些))

有没有办法动态调用HashMaps,这样我就可以将所有这些都缩短为一个循环,对每个HashMaps执行相同的操作


共 (4) 个答案

  1. # 1 楼答案

    如果代码的每一部分都非常相似,那么像eclipse这样的IDE就可以很容易地识别它,并且refactor它可以通过一个Map参数调用6次“DoSomething”

    如果你没有这样的IDE。。。用手做同样的事情,这并不难,而且会有回报(实际上,你不希望维持这种混乱状态,修复错误,或者通过代码使时间变为x6次)

  2. # 2 楼答案

    听起来是时候进行重构了

    • 这6种“不同”的方法应该变成一种 hashmap作为参数。因为这是他们唯一的区别
    • 此外,听起来你应该用一些收集的方式 你的hashmaps,这样你就可以对它们进行迭代,并使用你在每个hashmaps上创建的方法
  3. # 3 楼答案

    如果你有几个HashMap,让我们说:

    HashMap<String, String> aMap;
    HashMap<String, String> anotherMap;
    

    然后,可以使用以下内容填充新的ArrayList:

    List<HashMap<String, String>> myMaps = new ArrayList<>();
    myMaps.add(aMap);
    myMaps.add(anotherMap);
    

    这样,您就可以使用增强的for循环在地图中进行迭代:

    for (HashMap map : myMaps) {
        //code goes here
    }
    

    这里的一个好处是,您的列表是动态大小的,因此您可以随意添加和删除哈希映射

  4. # 4 楼答案

    基于你的问题,我不确定DoSomething方法应该做什么,但我理解为,它应该根据作为字符串提供的特定顺序类别返回特定的HashMap。在本例中,您只需为HashMap创建一个HashMap,并为第一个HashMap创建一个字符串键。根据提供的Sting键,您将获得相应的HashMap