java - 如何将构造函数参数分配给成员

标签 java constructor

我是 Java 新手,我也想知道如何在带有参数的构造函数内正确分配值。问题是如何正确封装这些值,即我们使用 set 方法还是仅使用 this 关键字就足够了?请注意我问的是封装和 OOP。

public class cars{
    private String make;
    private String model;
    public String getMake(){
        return make;
    }
    public String getModel(){
        return model;
    }
    public void setMake(String ParamMake){
        this.make = ParamMake;
    }
    public void setModel(String ParamModel){
        this.model = ParamModel;
    }

    // Should it use the setter
    public cars(String make,String model){
        setModel(model);
        setMake();
    }
    // Or
    public cars(String make,String model){
        this.model = mode;
        this.make = make;
    }
}

最佳答案

对此有两种观点:

  1. 永远不要从构造函数中调用可重写的方法,除了 setter ;如果您有 setter,请始终使用它,因此对成员的分配只会发生在一个中心位置。

  2. 永远不要从构造函数中调用可重写的方法,甚至 setter 也不行;只需直接分配,例如通过 this.make = make;

我相信#2 是更容易被接受的思想流派。 #1 的问题是,如果子类重写了 setter,那么在构造过程中可能会出现类之间难以理解的串扰。

<小时/>

旁注:Java 具有严格遵守的命名约定。类名应以大写字符开头;变量、参数和方法名称不应该。因此,Cars,而不是 cars,并且 paramModel,而不是 ParamModel

<小时/>

¹“可重写” - 例如,非私有(private)、非final方法。

关于java - 如何将构造函数参数分配给成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55647961/

相关文章:

c++ - 不调用采用 Base& 的构造函数

F# 备用构造函数为(可变的)let 绑定(bind)赋值

java - 如何找到com.sun.star.uno.RuntimeException的真正原因?

java - 搜索数组中的重复项

java - Spring如何从 Controller 返回 View 而不出现错误页面

c++ - 在构造函数中代替 make_shared_from_this 有什么用?

c++ - 'type' 的初始化没有匹配的构造函数

java - Android Proximity Alert - 不触发

java - 从二维数组中删除一列

java - 通过反射构造枚举的设计模式