动态调用现有变量

时间:2014-01-20 20:47:40

标签: java dynamic

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

我需要对文件进行一些处理和输出文本。但是,我已经走了“坏”的方式,只是简单地编写了六次代码,每次调用一个不同的hashmap。

我不能留下确切的演示代码,因为这将作为一个项目提供,因此可以通过随机抄袭发现者找到,并错误地标记为抄袭,因为它是一大块代码。但是,以下内容应该说明问题。

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

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

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

有没有办法动态调用HashMaps,这样我就可以将所有这些简化为一个单独的循环,为每个HashMaps做同样的事情?

4 个答案:

答案 0 :(得分:3)

如果您有几个哈希图,请说:

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
}

此处的好处是您的列表是动态大小的,因此您可以随意添加和删除散列图。

答案 1 :(得分:1)

听起来是时候做一些重构了。

  • 6种不同的方法应该变成一种方法 hashmap作为参数。因为这是他们唯一的区别。
  • 听起来你应该使用某种集合 您的哈希映射,以便您可以迭代它们 - 并使用您在每个哈希映射上创建的方法。

答案 2 :(得分:0)

如果你的代码中的每一块都如此相似,那么像eclipse这样的IDE可以很容易地识别它,refactor它可以通过Map参数调用“DoSomething”。

如果你没有这样的IDE ...手工做同样的事情,那就不那么难了并且会得到回报(你实际上不希望维持这个混乱并修复你的错误或通过你的代码使你的时间x6次)

答案 3 :(得分:0)

我不确定基于你的问题DoSomething方法应该做什么,但我理解它应该返回某个HashMap,具体取决于作为String提供的某个订单类别。在这种情况下,您可以使用第一个HashMap的String键创建HashMap的HashMap。根据提供的Sting键,您将获得相应的HashMap。