Java - 如果语句范围变量

时间:2015-09-06 01:19:16

标签: java spring if-statement

当我使用 if语句时我的范围有问题...我无法从内部获取值if if 。该对象在消息变量中具有空值。

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;

}

如何解决此问题?

3 个答案:

答案 0 :(得分:1)

你的格式化正在掩盖问题:有些情况username并不完全等于这些字符串中的任何一个:

  • "admin"
  • "seller"
  • "customer"

原因很简单:您没有else条件,其中包含长if条语句。

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!")
}

如果你绝对需要一个值,那么将其设置为合理的默认值;否则,请考虑使equals语句不区分大小写,如果username的大写稍微偏离("Admin"而不是"admin"等)。

// Also, flip the order of your equals so you don't run into silly NPEs
if("admin".equalsIgnoreCase(username))

username的值记录在至少DEBUG或TRACE中是有益的,直到您可以找出为什么值不会以您预期的形式出现。

答案 1 :(得分:0)

尝试添加默认的else子句来解决问题:

else {
    userMessage.setMessage("Hi " + username);
} 

答案 2 :(得分:0)

这是一个基于您的代码的简单测试应用程序。输出是:

name: admin message: Hi admin!
name: xyzzy message: null

Makoto's answer所示,如果您使用导致setMessage调用的其中一个用户名值运行if结构,则会设置该消息,并且从{{}}外部检索它是没有问题的{1}}。如果使用任何其他用户名值运行if结构,则不调用setMessage,并且消息将保留其初始值null。

if