Java-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();

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

阶级

方法

@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;
  }

}