Java-If语句范围变量
当我使用if语句时,范围有问题。。。我无法从内部获取值,否则。该对象在消息变量中具有空值 阶级 方法Java-If语句范围变量,java,spring,if-statement,Java,Spring,If Statement,当我使用if语句时,范围有问题。。。我无法从内部获取值,否则。该对象在消息变量中具有空值 阶级 方法 @RequestMapping(value = "/userMessage") public @ResponseBody UserMessage getMessage(Principal principal){ String username = principal.getName(); UserMessage userMessage = new UserMessage();
@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;
}
如何解决此问题?尝试添加默认else子句以解决此问题:
else {
userMessage.setMessage("Hi " + username);
}
您的格式设置稍微掩盖了这个问题:在这种情况下,
username
不完全等于以下任何字符串:
“管理员”
“卖方”
“客户”
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!")
}
如果您绝对需要它的值,那么将它设置为某种合理的默认值;否则,请考虑使您的<代码>等于语句不区分大小写,如果“代码>用户名< /代码>的外壳可以稍微关闭(<代码>)admin“< /代码>而不是<代码>”管理“< /代码>等”。
至少在调试或跟踪中记录
username
的值对您是有益的,直到您能够找出为什么该值没有以您预期的形式出现。下面是一个基于您的代码的简单测试应用程序。输出为:
name: admin message: Hi admin!
name: xyzzy message: null
如中所示,如果使用导致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;
}
}
嗯,实际的
username
值是多少?请显示UserMessage方法的代码,特别是setMessage()以及用于查看消息的任何内容都是空的。问题一定是set消息中的method@RamanSB或者username
不是“admin”、“seller”或“customer”,所以setMessage()从未调用。@PatriciaShanahan是的,你是对的,我同意。听起来不错,但问题的另一部分是尝试从“if”条件中获取值。。。正如您所见,userMessage对象在“message”变量中返回空值。主要问题是,我无法从“if”条件中获取值。你知道怎么解决吗?谢谢
name: admin message: Hi admin!
name: xyzzy message: 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;
}
}