在java

时间:2017-02-08 17:46:12

标签: java performance oop nullpointerexception

我试图在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];
    }
}

当我访问该对象时,它返回null,即抛出空指针异常。

我正在尝试访问该对象,如下所示:

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 :(得分: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(",");
}

希望这可以帮到你。