gpt4 book ai didi

java - ListResourceBundle 实现的值中包含 null

转载 作者:行者123 更新时间:2023-12-01 14:10:40 26 4
gpt4 key购买 nike

在 ListResourceBundle 实现中,我定义了一个数组,其中一些键包含空值。它可以很好地编译包含空值的包的加载过程。但是,当我在具有非空值的键上调用 getObject 时(如下面的示例“Pollution”,其值为“high”),它会给我一个 NullPointerException。

你知道为什么会这样吗?

ResourceBundle labels = ResourceBundle.getBundle("bundlething", new Locale("it"));
labels.getObject("Pollution");// here NullPointerException, However Pollution has a \n

值,同一数组的其他键没有。

更新:这是我收到的堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException at java.util.ListResourceBundle.loadLookup(ListResourceBundle.java:196) at java.util.ListResourceBundle.handleGetObject(ListResourceBundle.java:124) at java.util.ResourceBundle.getObject(ResourceBundle.java:387) at ResourceBundleThing.main(ResourceBundleThing.java:38)

这是我通过传递 new Locale("it") 作为目标 Locale 加载的包:

import java.util.ListResourceBundle;
public class bundlething_it extends ListResourceBundle {

private Object [][] contents ={{"Inhabitants",null},{"Pollution",new Double(3.4034)},{"Lollerball",new Integer(132)}};
public Object[][] getContents()
{
return contents;
}

}

“Inhabitans”对应的是 null,但我仅指具有非空值的“Pollution”。我仍然得到一个 NullPointerException;如果我从“居民”中删除该空值,它就会起作用..所以这就是问题所在,我知道。但是我想知道为什么,因为我没有使用那个特定的键值对。它会在调用 getObject 时立即加载所有值吗?

提前致谢。

最佳答案

堆栈跟踪精确地指示了错误的来源:

    Object[][] contents = getContents();
HashMap<String,Object> temp = new HashMap<>(contents.length);
for (int i = 0; i < contents.length; ++i) {
// key must be non-null String, value must be non-null
String key = (String) contents[i][0];
Object value = contents[i][1];
if (key == null || value == null) {
throw new NullPointerException(); // <-- HERE
}
temp.put(key, value);
}

所以,你已经有了答案:虽然我没有在文档中看到它提到,但 ListResourceBundle 不允许空值。

关于java - ListResourceBundle 实现的值中包含 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18548644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com