2011-03-08 16 views
4

看來不管我做什麼我都會得到錯誤的結果。如何測試列表<String>爲空或無效?

我的列表定義如下:

private List<String> selectedPriorities; 

沒有什麼奇怪的或幻想上的getter/setter:

public void setSelectedPriorities(List<String> selectedPriorities) { 
    this.selectedPriorities = selectedPriorities; 
} 

public List<String> getSelectedPriorities() { 
    return selectedPriorities; 
} 

在會話bean我想根據內容來改變不同的列表(或缺乏)此列表。

這裏是代碼:

List<String> restrictList = new ArrayList<String>(); 
restrictList.add("lower(logs.clazz) like lower(concat(#{logs.clazz},'%'))"); 
restrictList.add("lower(logs.rule) like lower(concat(#{logs.rule},'%'))"); 
PrioritySelectorBean selectorBean = (PrioritySelectorBean) Component.getInstance("prioritySelectorBean",true); 
System.out.println("constructRestrictionList selectorBean "+selectorBean.getSelectedPriorities()); 

if (selectorBean.getSelectedPriorities() == null) { 
    System.out.println("IS NULL"); 
    return restrictList; 
} 

if (selectorBean.getSelectedPriorities().isEmpty()){ 
    System.out.println("IS EMPTY"); 
} 

if (selectorBean.getSelectedPriorities().size()<1){ 
    System.out.println("HAS NOTHING IN IT"); 
    return restrictList; 
} 
System.out.println("NOT NULL"); 
restrictList.add("lower(logs.priority) in (#{prioritySelectorBean.selectedPriorities})"); 

它總是落空至NOT NULL並添加字符串restrictList。這讓我瘋狂!我如何在這個列表中檢測到虛無?這裏是日誌片斷

14:24:10,057 INFO [STDOUT] constructRestrictionList selectorBean [] 
14:24:10,057 INFO [STDOUT] NOT NULL 
+0

我不太清楚,但是,而不是使用==,使用equals()方法,我認爲這個名字是蘇瑞的一種方法。如果我錯了,請刪除此評論 – 2011-03-08 19:32:42

+1

似乎你真的有一個非空列表:)什麼doeas大小()返回? .get(0)返回什麼? – kostja 2011-03-08 19:32:44

+1

@Chuck Birkin:val == null在這裏完全沒問題。如果它是空的,最好不要調用對象上的方法;) – kostja 2011-03-08 19:34:16

回答

10

你可以得到你所看到的,如果列表中包含一個零長度字符串的結果:

List<String> list = new ArrayList<String>(); 
list.add(""); 

System.out.println("blah = " + list); // displays "blah = []" 
if (list.isEmpty()) { 
    System.out.println("Empty"); // doesn't get displayed 
} 
+0

打敗我吧。這似乎是最有可能的。 – ColinD 2011-03-08 19:38:11

+0

我同意,但不會size()返回一些東西?當我嘗試打印尺寸()時,我得到NPE。見上面的評論。 – april26 2011-03-08 20:01:20

+0

@april:沒有看到一些可以重現問題的可編譯代碼,我不知道! – 2011-03-08 20:03:11

-3

可能是因爲

if (selectorBean.getSelectedPriorities().isEmpty()){ 
     System.out.println("IS EMPTY"); 
} 

需要回報?

+1

我也考慮一下,但日誌會顯示「IS EMPTY」行 – 2011-03-08 19:34:40

+0

不確定 - 爲什麼'System.out.println(「IS EMPTY」)'沒有得到打印,爲什麼不能打印selectorBean.getSelectedPriorities ).size()<1評估爲false? – dfb 2011-03-08 19:35:32