2015-09-06 117 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; 
    } 

}