Java 在执行的任何时刻为同一属性在setter中调用getter是否有任何相关性?

Java 在执行的任何时刻为同一属性在setter中调用getter是否有任何相关性?,java,Java,我看到了一个我觉得毫无意义的代码 class CarFactory { public void setFullCar(Car car) { // some code car.setColor(car.getColor()); car.setWeight(car.getWeight()); car.setAcceleration(car.getAcceleration()); // some code

我看到了一个我觉得毫无意义的代码

class CarFactory {
    public void setFullCar(Car car) {
        // some code
        car.setColor(car.getColor());
        car.setWeight(car.getWeight());
        car.setAcceleration(car.getAcceleration());
        // some code
    }
}

当然,在setter中调用getter没有什么错。但我想知道,在执行的任何时刻,这一行是否有任何重要性?我的意思是,我们只是获取一个属性值,然后再次将其设置为相同的属性,这只是浪费代码


我的另一个疑问是为什么编译器(在预期中非常好)没有对此类代码发出任何警告。

对于编译器,setter和getter只是普通方法,所以它不会发出警告。

对于编译器,setter和getter只是普通方法,因此它不会发出警告。

用同一对象的getter值调用setter几乎没有任何意义。因此,我假设将有一个newCar对象,而您希望将这些值传递给其他对象

class CarFactory {
    public void setFullCar(Car car) {
        // some code
        newCar.setColor(car.getColor());
        newCar.setWeight(car.getWeight());
        newCar.setAcceleration(car.getAcceleration());
        // some code
    }
}
这假设有一个
Car
对象,其getter只返回其值,而不执行任何操作

public int getWeight() {
  return mass;
}
但在未来,将会有飞行汽车(充满氦气用于提升)可以做到这一点:

public int getWeight() {
  return mass - lift;
}

如果您的factory类只使用了
car.setWeight(car.mass)
它将无法用于飞行汽车。

用同一对象的getter值调用setter几乎没有任何意义。因此,我假设将有一个newCar对象,而您希望将这些值传递给其他对象

class CarFactory {
    public void setFullCar(Car car) {
        // some code
        newCar.setColor(car.getColor());
        newCar.setWeight(car.getWeight());
        newCar.setAcceleration(car.getAcceleration());
        // some code
    }
}
这假设有一个
Car
对象,其getter只返回其值,而不执行任何操作

public int getWeight() {
  return mass;
}
但在未来,将会有飞行汽车(充满氦气用于提升)可以做到这一点:

public int getWeight() {
  return mass - lift;
}

如果您的factory类仅使用了
car.setWeight(car.mass)
它将无法用于飞行汽车。

为什么编译器会发出警告?尝试将现有变量分配给自身,编译器不会告诉您任何事情,IDE可能会告诉您。您认为编译器为什么会这样做?编译器不知道
getColor
setColor
没有任何其他副作用。“我想知道这句话在执行的任何时刻是否都很重要?我的意思是,我们只是获取一个属性值,然后再次将其设置为相同的属性,这只是浪费代码“-研究编译器和运行时如何优化这一点会很有趣,如果您对这类内容感兴趣,您确定
getter
只是获取值,而
setter
只是设置值吗?e、 g.不涉及日志记录?还是数据库访问?还有别的吗?(您确定它真的使用了相同的
car
,而不是
this.car.setColor(car.getColor())
?为什么编译器应该发出警告?尝试将现有变量分配给自身,编译器不会告诉您任何事情,IDE可能会告诉您。您认为编译器为什么会这样做?编译器不知道
getColor
setColor
没有任何其他副作用。“我想知道在执行的任何时刻这行代码是否有任何重要性?我的意思是我们只是获取一个属性值并再次将其设置为相同的属性-这只是浪费代码“-研究编译器和运行时如何对此进行优化将是一件有趣的事情,如果您对这类事情感兴趣,您确定
getter
只是获取值,而
setter
只是设置值?例如,不涉及日志记录?或某些数据库访问?其他什么?(您确定它真的使用了相同的
汽车
,而不是
this.car.setColor(car.getColor())