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

Java 如何在语句之后调用构造函数?,java,constructor,Java,Constructor,我有这个calss关键字过滤器。我希望接受关键字的构造函数创建一个列表,将关键字添加到列表中,然后使用List参数调用构造函数。我该怎么做?因为我知道,调用构造函数应该是第一个调用 public class KeywordFilter implements Filter { private List<String> filteringKeywords; public KeywordFilter(List<String> filteringKeyword

我有这个calss关键字过滤器。我希望接受关键字的构造函数创建一个列表,将关键字添加到列表中,然后使用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类关键字过滤器实现过滤器{
私有列表过滤关键字;
公共关键字过滤器(列表过滤器关键字){
this.filteringKeywords=filteringKeywords;
}
公共关键字过滤器(字符串关键字){
List filteringKeywords=new ArrayList();
filteringKeywords.add(关键字);
this(filteringKeywords);//这会导致编译错误
}
}

通常,您可以将构造列表的代码放在单独的函数中(最好是,但不一定是,
静态的
):

私有静态列表makeFilterKeywords(字符串关键字){
List filteringKeywords=new ArrayList();
filteringKeywords.add(关键字);
返回filteringKeywords;
}
公共关键字过滤器(字符串关键字){
此(makeFilterKeywords(关键字));
}

通常,您可以将构造列表的代码放在单独的函数中(最好是,但不一定是,
静态的
):

私有静态列表makeFilterKeywords(字符串关键字){
List filteringKeywords=new ArrayList();
filteringKeywords.add(关键字);
返回filteringKeywords;
}
公共关键字过滤器(字符串关键字){
此(makeFilterKeywords(关键字));
}

直接创建您的列表:

public KeywordFilter(String keyword) {
  this(new ArrayList<String>(Arrays.asList(keyword)));
}
public关键字过滤器(字符串关键字){
这个(新的ArrayList(Arrays.asList(关键字));
}

直接创建您的列表:

public KeywordFilter(String keyword) {
  this(new ArrayList<String>(Arrays.asList(keyword)));
}
public关键字过滤器(字符串关键字){
这个(新的ArrayList(Arrays.asList(关键字));
}
公共关键字过滤器(列出过滤器关键字){
this.filteringKeywords=filteringKeywords;
}
公共关键字过滤器(字符串关键字){
这个(((List)Arrays.asList(关键字));
}
公共关键字过滤器(列出过滤器关键字){
this.filteringKeywords=filteringKeywords;
}
公共关键字过滤器(字符串关键字){
这个(((List)Arrays.asList(关键字));
}
这应该会有所帮助

public KeywordFilter(String keyword) {
    this(Collections.singletonList(keyword));
}
这应该会有所帮助

public KeywordFilter(String keyword) {
    this(Collections.singletonList(keyword));
}
最简单、最短的解决方案 但这将返回由指定数组支持的固定大小的列表,不支持
add()
remove()

这也适用于

最简单、最短的解决方案 但这将返回由指定数组支持的固定大小的列表,不支持
add()
remove()

这也适用于


您可以使用
关键字创建
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);
    }

}
public类关键字过滤器实现过滤器{
私有列表过滤关键字;
公共关键字筛选器(字符串关键字){//constructor
filteringKeywords=新的ArrayList();
filteringKeywords.add(关键字);
}
public void appendList(List filteringKeywords){//new方法
filteringKeywords.addAll(filteringKeywords);
}
}

您可以使用
关键字创建
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);
    }

}
public类关键字过滤器实现过滤器{
私有列表过滤关键字;
公共关键字筛选器(字符串关键字){//constructor
filteringKeywords=新的ArrayList();
filteringKeywords.add(关键字);
}
public void appendList(List filteringKeywords){//new方法
filteringKeywords.addAll(filteringKeywords);
}
}


您忘了将
关键字
作为参数传递。@TimB这是真的,Java允许您这样做。但是,一般来说,在构造函数完成之前不应该调用实例函数。@MariuszS不是真的:问题是“如何内联构造列表”,我同意我的代码有点太多。然而,鉴于OP要求“在构造函数之前运行代码”,最通用的解决方案是将代码放在函数中并调用它。这是一个通用的解决方案,因为我刚刚决定改为Set而不是list。您忘记将
关键字
作为参数传递。@TimB这是真的,Java允许您这样做。但是,一般来说,在构造函数完成之前不应该调用实例函数@MariuszS不是真的:如果问题是“如何内联构造列表”,我会同意我的代码有点太多。但是,鉴于OP要求“在构造函数之前运行代码”,最通用的解决方案是将该代码放在函数中并调用它。这是一个通用的解决方案,因为我刚刚决定更改为Set而不是Listyay!还有一个有用的方法可以添加到我的工具箱中!以前从未见过单例列表。返回一个只包含指定对象的不可变列表,而不包含
add()
remove()
@MariuszS是的,这是值得注意的。尽管在可能的情况下使所有内容都不可变是一个很好的做法。耶!还有一个有用的方法我可以添加到我的工具包中!以前从未见过单例列表。返回一个只包含指定对象的不可变列表,而不包含
add()
remove()
@MariuszS是的,这是值得注意的。尽管在可能的情况下使所有内容都不可变是一种很好的做法。
this(Arrays.asList(关键字));
是enough@MariuszS如果您想在构建后添加或删除
filteringKeywords
列表中的某些元素,则不需要添加或删除这些元素。
Arrays.asList
返回一个固定大小的列表。但我们不希望在这里:)@MariuszS您怎么知道?OP可能想在构建后向当前列表添加一些新关键字。:)
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);
    }

}