我有这个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
}
}
答案 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);
}
}