2015-09-06 74 views
-1

我在使用如果语句时存在范围问题...如果还有其他,我无法从中获取值。该对象在消息变量中具有空值。Java - 如果语句范围变量

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

嗯,实际的'username'值是多少? –

+1

请显示UserMessage方法的代码,特别是setMessage()以及您用来查看消息是否为空的任何代码。 –

+0

问题必须在设置消息方法 – RamanSB

回答

0

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

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

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

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

原因很简单:您没有else条件,并且有长链if -statements。

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的值,直到你能弄清楚为什么值不会是你预期的表单来。

+0

听起来不错,但问题的另一部分是尝试从“if”条件中获取值...正如你可以看到userMessage对象在“message”变量中返回一个空值。主要问题是,我无法从“如果”条件中获得价值。你知道如何解决它吗?谢谢。 – wilson

0

以下是基于您的代码的简单测试应用程序。输出是:

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

Makoto's answer指出,如果运行if结构,导致了一个setMessage呼叫的用户名值中的一个,该消息被设定,是没有问题的从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; 
    } 

}