【问题标题】:Looking for a workaround for dynamic variable declaration in a for loop在 for 循环中寻找动态变量声明的解决方法
【发布时间】:2015-10-08 12:27:48
【问题描述】:

我想在 for 循环中执行多次重复的任务。我必须将时间序列对象存储为IExchangeItem,这是openDA(数据同化软件)中的一个特殊类。

这是其中一项任务(有效):

HashMap<String, TimeSeries> items = new LinkedHashMap<String, TimeSeries>();
...
TimeSeries tsc1Q = new TimeSeries(time,value);
id = "Q1";
tsc1Q.setId(id);
this.items.put(id,tsc1Q);
IExchangeItem c1Q = new TimeSeries(tsc1Q);

任务之间的变化是时间序列对象的idIExchangeItem 的名称。我必须为每个时间序列创建一个新的IExchangeItem 对象。

这是我在 for 循环中尝试的:

HashMap<String, TimeSeries> items = new LinkedHashMap<String, TimeSeries>();
...
TimeSeries temp;
for (int i = 0; i<readDataDim[0]; i++) {
    value[0] = values[i];
    id = exchangeItemIDs[i];
    temp = new TimeSeries(time,value);
    temp.setId(id);
    this.items.put(id,temp);
    IExchangeItem <??> = new TimeSeries(temp);  //* How can I handle this line?
}

我知道我不能在 java 中使用动态变量名,并且通常使用数组、列表或映射来解决这个问题(这就是我在上面的代码 sn-p 中使用 &lt;??&gt; 的原因。但是,我我是 java 的相对初学者,我不知道如何解决这个特定问题,因为我必须为每个时间序列重新调用 IExchangeItem

来自here,我认为我在 for 循环中创建的 IExchangeItem 在 for 循环之外无法访问,那么我如何在 for 循环之外初始化 IExchangeItemn 复制?

编辑: 如果我尝试这样的事情,HashMap 是否会创建 nIExchangeItem 实例?

HashMap<String,IExchangeItem> list = new LinkedHashMap<String,IExchangeItem>();

【问题讨论】:

  • 不能有 IExchangeItem 数组或列表吗?
  • @zubergu 这个列表会创建nIExchangeItems 实例吗?问题是IExchangeItem 是某种全局类(我不得不承认我不了解每一个细节......)如果我将它们存储在列表中,我不确定我是否可以访问这些IExchangeItems .那么它们可能对其余代码不可见,或者它们是?
  • IExchangeItem 在哪里使用?
  • 在我定义它的类之外的不同类中。
  • 从哪里填充 readDataDim[]?

标签: java


【解决方案1】:

只有一个建议,当您可以传递数组的大小或固定数字(基于数组)时,尝试编写一个单独的方法,然后创建一个 hashMap 并添加那么多实例及其键和值,不能将此作为评论发布,因此无法将其发布为答案。

尝试使用 readDataDim[0] 值的值创建一个新方法,

public Map<String, IExchangeItem>  createAndInitialzeMap(int maxValue) {
    Map<String, IExchangeItem> map = new HashMap<>();
    String temp = "tempName";
    for(int i =0; i < maxValue ; i ++ ) {
            map.put(temp+i, new IExchangeItem());
    }   
    return map;
}

返回这种方式,您可以初始化地图及其变量名,并且可以在任何地方的应用程序中使用它。但是,如果存在此类代码并且时间允许,我会考虑重构。

关于 hashMap 你应该阅读的另一件事。 :) :)

【讨论】:

  • 谢谢。我没有编写该方法,而是将循环内联,并且我的单元测试仍然运行而没有错误或失败。所以这可以完成工作。这些 HashMap 。 . .我一直在阅读 Java 文档,但老实说,其中大部分内容对我来说仍然听起来像是一门外语。
  • 别担心我的朋友,最终你会得到它.. :) 顺便说一句,欢迎来到 Java 世界 :) :)
  • 而且我仍然会坚持创建一个新方法,它使代码更易于维护:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
相关资源
最近更新 更多