我试图在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的初学者,并试图提高这种方法的性能。如果有的话,请建议更好的方法。
答案 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(",");
}
希望这可以帮到你。