簡體   English   中英

語句后如何調用構造函數?

[英]How can I call a constructor after statements?

我有這個calss KeywordFilter。 我希望接受關鍵字的構造函數創建一個列表,將該關鍵字添加到列表中,然后使用list參數調用構造函數。 我怎樣才能做到這一點? 因為據我所知,應該首先調用構造函數。

public class KeywordFilter implements Filter {

    private List<String> filteringKeywords;

    public KeywordFilter(List<String> filteringKeywords) {
        this.filteringKeywords = filteringKeywords;
    }

    public KeywordFilter(String keyword) {
        List<String> filteringKeywords = new ArrayList<String>();
        filteringKeywords.add(keyword);
        this(filteringKeywords);//This makes a compilation error
    }

}

直接創建列表:

public KeywordFilter(String keyword) {
  this(new ArrayList<String>(Arrays.asList(keyword)));
}

通常,您可以將構成列表的代碼放在單獨的函數中(最好,但不一定是static ):

private static List<String> makeFilterKeywords(String keyword) {
    List<String> filteringKeywords = new ArrayList<String>();
    filteringKeywords.add(keyword);
    return filteringKeywords;
}
public KeywordFilter(String keyword) {
    this(makeFilterKeywords(keyword));
}

這應該有幫助

public KeywordFilter(String keyword) {
    this(Collections.singletonList(keyword));
}
   public KeywordFilter(List<String> filteringKeywords) {
        this.filteringKeywords = filteringKeywords;
    }

    public KeywordFilter(String keyword) {
       this(((List<String>)Arrays.asList(keyword));
    }

最簡單,最短的解決方案

public KeywordFilter(String keyword) {
    this(Arrays.asList(keyword));
}

但這會返回由指定數組支持的固定大小的列表 ,而沒有add()remove()支持。

這也適用於varargs

public KeywordFilter(String...  keywords) {
    this(Arrays.asList(keywords));
}

您可以使用KeyWord創建ArrayList ,然后讓另一個方法將新列表追加到現有列表(您在構造函數中僅使用關鍵字創建的列表)。

像這樣:

public class KeywordFilter implements Filter {

    private List<String> filteringKeywords;

    public KeywordFilter(String keyword) { //Consctructor
        filteringKeywords = new ArrayList<String>();
        filteringKeywords.add(keyword);
    }

   public void appendList(List<String> filteringKeywords) { //new method 
        filteringKeywords.addAll(filteringKeywords);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM