![](/img/trans.png)
[英]Java 1.7 if statement on result of declaring and initialising a variable with scope of the if statement
[英]Java - If statement scope variable
当我使用if 语句时,范围有问题......我无法从if else内部获取值。 该对象在消息变量中具有空值。
班级
public class UserMessage{
String message;
//Getters and Setters
}
方法
@RequestMapping(value = "/userMessage")
public @ResponseBody UserMessage getMessage(Principal principal){
String username = principal.getName();
UserMessage userMessage = new UserMessage();
if(username.equals("admin")){
//Set value to "message" variable
userMessage.setMessage("Hi admin!")
}
else
if (username.equals("seller")) {
//Set value to "message" variable
userMessage.setMessage("Hi seller!")
}
else
if (username.equals("customer")) {
//Set value to "message" variable
userMessage.setMessage("Hi customer!")
}
// This object has a null value in the message variable.
return userMessage;
}
我该如何解决这个问题?
您的格式稍微掩盖了问题:存在username
不完全等于这些字符串中的任何一个的情况:
"admin"
"seller"
"customer"
原因很简单:在长长的if
语句链中没有else
条件。
if (username.equals("admin")) {
//Set value to "message" variable
userMessage.setMessage("Hi admin!")
} else if (username.equals("seller")) {
//Set value to "message" variable
userMessage.setMessage("Hi seller!")
} else if (username.equals("customer")) {
//Set value to "message" variable
userMessage.setMessage("Hi customer!")
}
如果您绝对需要它的值,请将其设置为一些合理的默认值; 否则,如果username
大小写可能稍微偏离( "Admin"
而不是"admin"
等),请考虑使您的equals
语句不区分大小写。
// Also, flip the order of your equals so you don't run into silly NPEs
if("admin".equalsIgnoreCase(username))
至少在 DEBUG 或 TRACE 中记录username
的值对您是有益的,直到您弄清楚为什么该值没有以您预期的形式出现。
尝试添加一个默认的 else 子句来解决问题:
else {
userMessage.setMessage("Hi " + username);
}
这是一个基于您的代码的简单测试应用程序。 输出是:
name: admin message: Hi admin!
name: xyzzy message: null
如Makoto 的回答所示,如果您使用导致 setMessage 调用的用户名值之一运行if
结构,则消息已设置,并且从if
外部检索它没有问题。 如果您使用任何其他用户名值运行 if 结构,则不会调用 setMessage,消息将保留其初始值 null。
public class Test {
public static void main(String[] main) {
testit("admin");
testit("xyzzy");
}
private static void testit(String name) {
UserMessage message = getMessage(name);
System.out.println("name: " + name + " message: " + message.getMessage());
}
public static UserMessage getMessage(String username) {
UserMessage userMessage = new UserMessage();
if (username.equals("admin")) {
// Set value to "message" variable
userMessage.setMessage("Hi admin!");
}
else if (username.equals("seller")) {
// Set value to "message" variable
userMessage.setMessage("Hi seller!");
}
else if (username.equals("customer")) {
// Set value to "message" variable
userMessage.setMessage("Hi customer!");
}
// This object has a null value in the message variable.
return userMessage;
}
}
class UserMessage {
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.