希望在传递给父构造函数之前初始化成员
Wish to initialize member before passing to parent constructor
这是我的难题的玩具示例:
public abstract class Car {
public Car(Seat[] seatsParam) { // Could be protected.
driverSeat = new DriverSeat();
seats = new ArrayList<Seat>();
seats.add(driverSeat);
seats.addAll(seatsParam);
}
private final List<Seat> seats;
private final DriverSeat driverSeat;
}
public class MyCar extends Car {
public MyCar() {
super(new Seat[]{new PassengerSeat()}); // Cannot assign to member.
}
public PassengerSeat getPassengerSeat() { // Would like this accessor.
return passengerSeat;
}
private final PassengerSeat passengerSeat;
}
Car 有一个 Seat 列表(座位超类型),最好在构造函数中初始化。每辆车都有一个 DriverSeat。 MyCar 还有一个 PassengerSeat,我想从子类型访问它,但也想从父列表(作为座位)访问它。
我拍下的一些东西:
- 上面的代码:passengerSeat不会在子类中初始化。我可以在 MyCar 的构造函数中获取列表并沮丧,但这很难看。
- 使 passengerSeat 静态化:不应该静态化,因为可能有许多其他具有独特座位的 MyCars。
- 让 Car 定义一个抽象的 getSubclassSeats() 并向其添加 driverSeat:这在构造函数中不起作用,因为 passengerSeat 尚未初始化。我可以将席位设置为非最终席位,并在构造函数之后进行,但同样很丑陋。
我想说这是我应该可以用OO表达的东西,定义一个变量传给parent引用。但是我想不出如何做得很好。自从我使用 C++ 以来已经有一段时间了,但这就是初始化列表解决的问题吗?如果是这样,Java 是否有等价物?
我见过有类似问题的人使用线程局部变量,天知道还有什么其他可怕的技巧,幸运的是有一个简单的解决方案:
public MyCar() {
this(new PassengerSeat());
}
private MyCar(PassengerSeat seat) {
super(new PassengerSeat[]{seat});
// Well do something with your seat now.
}
这是我的难题的玩具示例:
public abstract class Car {
public Car(Seat[] seatsParam) { // Could be protected.
driverSeat = new DriverSeat();
seats = new ArrayList<Seat>();
seats.add(driverSeat);
seats.addAll(seatsParam);
}
private final List<Seat> seats;
private final DriverSeat driverSeat;
}
public class MyCar extends Car {
public MyCar() {
super(new Seat[]{new PassengerSeat()}); // Cannot assign to member.
}
public PassengerSeat getPassengerSeat() { // Would like this accessor.
return passengerSeat;
}
private final PassengerSeat passengerSeat;
}
Car 有一个 Seat 列表(座位超类型),最好在构造函数中初始化。每辆车都有一个 DriverSeat。 MyCar 还有一个 PassengerSeat,我想从子类型访问它,但也想从父列表(作为座位)访问它。
我拍下的一些东西:
- 上面的代码:passengerSeat不会在子类中初始化。我可以在 MyCar 的构造函数中获取列表并沮丧,但这很难看。
- 使 passengerSeat 静态化:不应该静态化,因为可能有许多其他具有独特座位的 MyCars。
- 让 Car 定义一个抽象的 getSubclassSeats() 并向其添加 driverSeat:这在构造函数中不起作用,因为 passengerSeat 尚未初始化。我可以将席位设置为非最终席位,并在构造函数之后进行,但同样很丑陋。
我想说这是我应该可以用OO表达的东西,定义一个变量传给parent引用。但是我想不出如何做得很好。自从我使用 C++ 以来已经有一段时间了,但这就是初始化列表解决的问题吗?如果是这样,Java 是否有等价物?
我见过有类似问题的人使用线程局部变量,天知道还有什么其他可怕的技巧,幸运的是有一个简单的解决方案:
public MyCar() {
this(new PassengerSeat());
}
private MyCar(PassengerSeat seat) {
super(new PassengerSeat[]{seat});
// Well do something with your seat now.
}