繁体   English   中英

Java - If 语句范围变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM