Знаешь что? У меня был один из тех дней, когда, как ни старайся, ничто не заканчивалось тем, что работало правильно, поэтому, чтобы что-то действительно работало правильно, я исправлю твой код!
Я иногда вижу, как люди публикуют здесь полное переписывание странных вопросов, и я всегда удивлялся почему!? Теперь я знаю, что это компенсирует тот день, когда одна из ваших виртуальных машин обанкротилась нет причин, у вас есть ошибка, которая ускользает от размножения до тех пор, пока вы не отводите взгляд, и ваша собака самопроизвольно забыла свое домашнее обучение.
В любом случае вам нужно выяснить, хотите ли вы, чтобы эта переменная называлась 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.
, потому что он мне не очень нравится - но, эй, по-прежнему ваш код, отложите его, если хотите!