如何在语句后调用构造函数?

时间:2014-01-18 17:04:06

标签: java constructor

我有这个calss KeywordFilter。我希望接受关键字的constrcutor创建List,将关键字添加到列表中,然后使用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
    }

}

6 个答案:

答案 0 :(得分:5)

直接创建列表:

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

答案 1 :(得分:2)

通常,您可以将构建列表的代码放在单独的函数中(最好,但不一定是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));
}

答案 2 :(得分:2)

这应该有帮助

public KeywordFilter(String keyword) {
    this(Collections.singletonList(keyword));
}

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

最简单和最简短的解决方案

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

但是这会返回由指定数组支持的固定大小列表,而不支持add()remove()

这也适用于varargs

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

答案 5 :(得分:0)

您可以使用ArrayList创建KeyWord,然后使用另一种方法将新列表附加到现有列表(您在构造函数中仅创建了关键字)。

这样的事情:

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);
    }

}