【问题标题】:Can't retrieve HashMap inputs in another method无法在另一种方法中检索 HashMap 输入
【发布时间】:2011-04-02 17:02:30
【问题描述】:

我遇到了一个我无法解决的小问题。

我有一个在我的 HashMap 中使用过的超类 (SetupFunctions) -->

public HashMap<Integer, SetupFunctions> map =  new HashMap<Integer, SetupFunctions>();

所有其他类都扩展了SetupFunction。 我需要做 160 种方法来检索唯一数据,并且我需要将这些数据存储在一个地方以便以后检查(这是一个自动化测试)。 这就是为什么我在 HashMap 中有 SetupFuncition 类型。

所以,我用构造函数实例化一个类,然后将它添加到 hashmap 中:

MyClass m = new MyClass (car1, var2, var3, var4, var5);
map.put(getCenarioID(), m);    

在同样的方法上,我添加了一些 sysout 只是为了看看发生了什么:

System.out.println(map.containsKey(1));
System.out.println(map.size());

正如预期的那样,它会打印 True 和 1... 但是当我离开这个方法(方法执行结束)并返回到 main 方法时,同样的 sysout 会打印 False 和 0。

我想知道为什么我的 hashmap 为空或正在重置...这不会发生...我说的对吗?

【问题讨论】:

  • 您的Map 变量在哪里? main 方法和将 MyClass 放入地图的方法真的使用相同的变量吗?您能否生成一个显示相同行为的简短代码,以便您和我们找出发生了什么?
  • 如果您发布 maim 和其他方法的代码会有所帮助

标签: java collections map hashmap


【解决方案1】:

使用所提供的信息很难说到底发生了什么。但似乎您可能使用了两个不同的HashMaps,名为Map,一个在方法内部,另一个在方法外部。

我认为您有两个(可能更多)名为 Map 的变量 - 一个是您的类的成员,而另一个是您的驱动程序类的元素(即声明您的 main 方法的类)或变量在 main 方法本身内部。

【讨论】:

  • 哦,虽然我编辑了问题,但我找到了解决方案。我正在调试,我发现填充 HashMap 的方法是由非静态实例( object i =new object() )调用的,当实例完成时,它擦除了 hashmap .. 所以我更改了调用代码,现在它可以工作了像一个魅力。感谢人们!
【解决方案2】:

Map 是静态访问还是动态访问?这是您的 main 可以正确访问它的唯一方法。确保没有可能使编译器混淆的重复变量Map

如果你能把代码贴在这里,那就最好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多