我需要创建一个可以检索消息数据并将其打印出来的消息类,问题是如果我删除了等号,则必须在消息类中提供静态字段值,例如(public static String exc01 =“testErr”;)。 "testErr"
;我收到一个错误;
Exception in thread "main" java.lang.NullPointerException
at java.util.PropertyResourceBundle.handleGetObject(Unknown Source)
at java.util.ResourceBundle.getObject(Unknown Source)
at java.util.ResourceBundle.getString(Unknown Source)
at test1.Messages.getString(Messages.java:19)
at test1.TestMessageClass.main(TestMessageClass.java:8)
1.如果消息属性文件中已经包含错误值,为什么要在类消息中为静态字符串exc01提供值?
2.有更好/更明智的方法来完成消息的所有逻辑吗?
为此,我创建了如下的消息类
package msg;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class Messages {
private static final String BUNDLE_NAME = "test1.messages";
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
public static String exc01 ="testErr";
public static String exc02;
private Messages() {
}
public static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}
我在名为messages.properties的同一包下有用于发送消息的文件,并包含以下消息
exc01=Failed to create the extension for {0}
exc02=Failed to create the extension
我已经创建了简单的测试程序
public class TestMessageClass {
public static void main(String[] args) {
System.out.println(Messages.getString("exc01"));
System.out.println(Messages.getString(Messages.exc01));
}
}
打印
无法为{0}创建扩展名
!testErr!
最佳答案
您的代码调用
Messages.getString(Messages.exc01)
Messages.exc01
是变量或类型String。其默认值为null。您似乎并不相信它不是“exc01”。您将变量的名称与其值混淆了。因此,如果不初始化变量,上面的代码将尝试从具有空键的属性文件中获取消息,这没有意义:您必须提供非空键,这就是为什么要获取一个空指针异常。
如果要获取键“exc01”的消息,则可以使用
Messages.getString("exc01")
或者您可以将任何String变量初始化为“exc01”,然后传递此变量:
public static String exc01 = "exc01";
...
Messages.getString(Messages.exc01);
请注意,exc01应该定义为常量,而不是变量。因此,它应该是最终的,并遵守Java命名约定中的常量:
public static final String EXC01 = "exc01";
...
Messages.getString(Messages.EXC01);
请注意,如果像您一样使用“testErr”初始化变量,则代码将在属性文件中查找与键“testErr”关联的消息。由于不存在这样的消息,因此您将获得MissingResourceException,因此ctach块将返回
!testErr!
。这就是为什么测试输出中包含!testErr!
的原因。
关于java - 错误类消息创建方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17717497/