2017-02-08 8 views
1

Я пытаюсь создать объект класса как значение HashMap в java. Ниже мой Java-код:Создание объекта с помощью HashMap в java

public interface Message { 
    public String nextMessage(String data); 
} 

public class DataMessage implements Message{ 
    private static String[] randomData; 

    public DataMessage(String data) { 
     randomData = data.split(","); 
    } 

    @Override 
    public String nextMessage(String data) { 
     int index = randomIndex.nextInt(randomData.length-1); 
     return randomData[index]; 
    } 
} 

Когда я доступ к этому объекту он возвращается нуль, т.е. бросать исключения нулевого указателя.

Я пытаюсь получить доступ к этому объекту, как показано ниже:

public class MyMessage { 

    public MyMessage() { 
    } 

    public static void main() { 
     HashMap<String,Message> hash = new HashMap<String,Message>(); 
     if (some condition) { 
      hash.put(key,new DataMessage("this is my data")); 
     } 

     <some code> 

     hash.get(key).nextMessage(); 
     //Throws nullpointer exception 
    } 
} 

Может кто-нибудь пожалуйста, помогите мне понять, почему это происходит?

Я начинаю работать в Java и стараюсь улучшить производительность этого подхода. Пожалуйста, предложите лучшие подходы, если таковые имеются.

+1

«ключ» используется дважды, без инициализации. –

+0

Предполагая, что вы создали экземпляр своего «ключа», возможно, что-то удерживает вас от ввода вашего условия if. Убедитесь, что ket действительно находится в вашем hashmap. –

ответ

0

Я думаю, что вы не можете получить доступ к вам if(){} так что ваши HashMap всегда пусто, что вы получите NullPointException, потому что, когда вы пытаетесь использовать hash.get(key).nextMessage(); первая часть hash.get(key) является нулевой, так что вы не можете сделать null.nextMessage();

так чтобы решить вашу проблему, убедитесь, что ваш HashMap не пуст, и есть элемент с этим ключом.

if (hash .containsKey(key)) { 
    //key exists 
    hash.get(key).nextMessage(); 
} else { 
    //key does not exists 
    System.out.println("No key exist"); 
} 

Примечание Я думаю, что у вас есть некоторые ошибки в функции, например, этот метод должен возвращать некоторые вещи или void:

public RandomData(String data) { 
    randomData = data.split(","); 
} 

Надеется, что это может помочь вам.

+0

Спасибо, что заметили разницу. Пропущено заменить имя конструктора при замене проприетарного кода на общий. Обновлено сейчас: И hashmap имеет много записей. Для понимания цели я поставил образец кода. Я отлаживал код и проверял, что hashmap не пуст. – user3150037

+0

yes @ user3150037 Я знаю, может быть, ваш хэш-файл не пуст, но вам нужно проверить, есть ли элемент с этим ключом в вашем хэш-карте или нет, если да, вы можете сделать 'hash.get (key) .nextMessage();' else you получит исключение NullPointException, как вы его получите –

 Смежные вопросы

  • Нет связанных вопросов^_^