【问题标题】:Accessing setters of object within object访问对象内对象的设置器
【发布时间】:2018-07-16 11:33:20
【问题描述】:

假设我有两个班级:

public class Customer {
    private String name;
    private Car car;

    public Customer() {}

    public Customer(String name, Car car) {
        this.name = name;
        this.car = car;
    }

    public void setName(String name) {this.name = name;}

    public String getName() {return this.name;}
    public Car getCar() {return this.car;}
}

public class Car {
    private String brand;

    public Car() {}

    public Car(String brand) {
        this.brand = brand;
    }

    public void setBrand(String brand) {this.brand = brand;}

    public String getBrand() {return this.brand;}
}

从 Martin Konecny 在this post 的回答中,我了解到为了从Customer 访问Cargetters,我会这样做:

Customer c = new Customer("Lefrost", "BMW");
String brand = c.getCar().getBrand();

但是我应该如何从Customer 访问Carsetter

我尝试了以下方法,效果很好:

// adding setter for 'car' in Customer class
public void setCar(Car car) {this.car = car;}

然后像这样改变Car的数据字段内容:

c.setCar(new Car("Honda"));

但这需要我创建一个新的Car 对象,它实际上并没有使用Car 类中的设置器。


我究竟如何从Customer 访问Car 的设置器?

如果没有好的方法,有没有更好的方法将Car的数据字段内容从Customer更改?

【问题讨论】:

    标签: java class object


    【解决方案1】:

    只需调用getCar,然后在返回的对象上调用setBrand 方法:

    c.getCar().setBrand("Honda");
    

    getCar() 返回的Car 将是存储在Customer 中的Car,因此没有什么能阻止您直接在返回的对象上设置品牌。

    如果Car 是不可变的,那么您的尝试:

    c.setCar(new Car("Honda"));
    

    是实现这一目标的唯一方法。

    【讨论】:

      【解决方案2】:

      如果品牌字段不是最终的,你可以c.getCar().setBrand("Honda")

      【讨论】:

        【解决方案3】:

        您需要获取 Car 对象,然后在其中设置属性:

        c.setCar(new Car());
        c.getCar().setBrand("Honda");
        

        【讨论】:

          猜你喜欢
          • 2011-11-02
          • 1970-01-01
          • 2013-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多