静态工厂方法不起作用

时间:2018-05-12 18:30:34

标签: java effective-java

开始阅读"有效的java"并且无法理解为什么当我尝试编写示例时它对我不起作用..

编译错误:

  

错误:(12,16)java:constructor类Car中的Car无法应用   给定类型;

public class Car {

    String model;

    //no private constructor

    public static Car fromModel(String model) {
        return new Car(model);
    }

}

这里一切正常:

public class Car {

    String model;

    //no private constructor

    public static Car fromModel(String model) {
        return new Car(model);
    }
}

//Here everything is OK:

public class Car {

    String model;

    private Car(String model) {
        this.model = model;
    }

    public static Car fromModel(String model) {
        return new Car(model);
    }

}

为什么我应该生成构造函数,如果"考虑静态工厂方法而不是构造函数" ???

2 个答案:

答案 0 :(得分:1)

“考虑使用静态工厂方法而不是构造函数”是指为您的类 类的库的用户提供对对象实例化的访问。

工厂方法使用的构造函数是工厂方法的实现细节,方法与tsc --watch方法相同 - 方法和私有构造函数一起构成了类库外部用户的一种工厂方法。

答案 1 :(得分:0)

对我来说,答案是我需要至少一个私有构造函数来创建几个静态方法。

没有编译错误:

public class Car {

String model;
String color;
String modelYear;

private Car(String model, String color, String modelYear) {
    this.model = model;
    this.color = color;
    this.modelYear = modelYear;
}

public static Car fromModelAndColor(String model, String color){
    return new Car(model, color, null);
}

public static Car fromModelAndYear(String model, String modelYear){
    return new Car(model, null, modelYear);
}

public static Car fromModelAndColorAndYear(String model, String color, String modelYear){
    return new Car(model, color, modelYear);
}

}