我在尝试让HashMap可以访问其所在类中的其他方法时遇到了麻烦。
这基本上就是我想做的事情,
class object
method main
this.test=9
method fire
output this.test
这是真正的代码
import java.util.*;
import java.lang.String;
import java.util.HashMap;
public class problem {
public HashMap dict;
public problem() {
HashMap<String, String[]> dict = new HashMap<String, String[]>();
// put everything into hashmap
String[] items = { "toys", "sun" };
dict.put("animal", items);
String[] items_2 = { "fun", "games" };
view.put("human", items_2);
this.view = view;
// start
this.BeginM();
}
public void BeginM() {
System.out.println(this.view.get("human")[0]); // should give "fun"
}
}
我在输出阶段遇到此错误:
array required, but java.lang.Object found
答案 0 :(得分:5)
我有时会看到人们在这里发布了一些奇怪问题的重写,我总是想知道为什么!?现在我知道,这是为了弥补你的虚拟机有一天瘫痪的一天无缘无故地,你有一个无法复制的错误,直到你离开的那一刻,你的狗自发地忘记了他的家训。
无论如何,您需要确定是否要将该变量称为dict
或view
。选择一个,但你需要坚持下去。我真的不在乎,但我在这里使用dict
。如果您更喜欢另一个,嘿,这是您的代码,做您喜欢的!但是不要同时使用它们,这会让人感到困惑。
您的问题是,在您的领域,您只是使用HashMap
。使用花哨的好东西,或演员。否则,HashMap
只保留Object
个。而Object
不是String[]
。因此,您需要将get()
的结果转换为String[]
,否则您可能会忘记所有这些并使用花哨的好类型的东西(有时我们称之为“泛型”)。我将使用花哨的好东西(HashMap<String, String[]>
),但就像我说的那样 - 这是你的代码,如果你想要施放!
无论如何,这让我们:
public class problem
{
HashMap<String, String[]> dict;
public problem()
{
HashMap<String, String[]> dict = new HashMap<String, String[]>();
// put everything into hashmap
String[] items =
{
"toys", "sun"
};
dict.put("animal", items);
String[] items_2 =
{
"fun", "games"
};
dict.put("human", items_2);
this.dict = dict;
// start
this.BeginM();
}
public void BeginM()
{
System.out.println(this.dict.get("human")[0]); // should give "fun"
}
}
看我的第3行?通过将该字段dict
声明为HashMap<String, String[]>
,现在BeginM()
知道它所拥有的对象类型,您将不会再出现该错误。
虽然我会更进一步,使它更简洁,更容易出错:
public class Problem
{
private final HashMap<String, String[]> dict;
public void Problem()
{
dict = new HashMap<String, String[]>();
dict.put("animal", new String[] { "toys, "sun" });
dict.put("human", new String[] { "fun", "games" });
BeginM();
}
public void BeginM()
{
System.out.println(dict.get("human")[0]);
}
}
那我在那里做了什么?好吧,首先我把Problem
大写了。让类名以大写字母开头是一种惯例。当然不是强制性的,但它很高兴,尤其是当你与其他开发人员合作时。例证:我认为problem
的构造函数是一个缺少返回值的方法!另外,我将dict
设为final和private,这样您以后就不会意外覆盖该字段。我把它设为私有,这是一个很好的设计。如果其他人需要了解它,我们可以给他们一个访问方法。最后,我摆脱了this.
,因为我真的不喜欢它 - 但是,嘿,仍然是你的代码,如果你想要的话就把它放回去!
答案 1 :(得分:0)
我相信this.view.get("human")
会返回一个String,而不是一个数组。您需要使用this.view.get("human").charAt(0)
而不是this.view.get("human")[0]
,因为Java字符串不能像数组一样编入索引。
答案 2 :(得分:0)
更改:(BTW,您的示例中缺少)
Map view = new HashMap<String,String[])
到
Map<String,String[]> view = new HashMap<String,String[])