在构造函数中初始化私有变量

t0m*_*cat 2 java variables initialization

我一直在看这个代码的比较器.我的问题是在构造函数中初始化两个私有变量有一个特定的好处(在默认构造函数中完成).我知道第二个构造函数可用于创建具有提供值的实例.如果我这样做会有什么不同

private String sortBy = COLUMN_LAST_NAME;
private boolean ascending = true; 
Run Code Online (Sandbox Code Playgroud)

如果它是一个真正简单而通用的问题,我道歉.

public class CustomComparator implements Comparator<StudentList>
{   private String sortBy;
private boolean ascending;

public CustomComparator()
{
    sortBy = COLUMN_LAST_NAME;
    ascending = true;
}

public CustomComparator(String sortBy, boolean ascending)
{
    this.sortBy = sortBy;
    this.ascending = ascending;
}
Run Code Online (Sandbox Code Playgroud)

pnt*_*pnt 6

我所见过的最佳实践是有一个构造函数,它接受所有参数,即使它意味着它必须是私有的,然后this(..,..,...)在提供适当的值时使用其他构造函数调用它.

这将使您尽可能多地重用代码,并且将来的修复只能到一个地方和一个地方 - 无需对代码进行双重维护.

您的示例如下所示:

public class CustomComparator implements Comparator<StudentList> {
    private String sortBy;
    private boolean ascending;

    public CustomComparator()
    {
        this(COLUMN_LAST_NAME, true);
    }

    public CustomComparator(String sortBy, boolean ascending)
    {
        this.sortBy = sortBy;
        this.ascending = ascending;
    }
}
Run Code Online (Sandbox Code Playgroud)

初始化通常被接受在构造函数中,以便更容易区分静态成员的静态初始化和实例变量的每个实例初始化.没有性能差异.