我一直用这个把头撞在墙上一段时间 -
我有一个方法来创建另一个类的对象列表:
public List <PayrollRecord> processPayroll() {
List<PayrollRecord> payroll = new ArrayList<PayrollRecord>();
for (Employee employee : staff) {
PayrollRecord payRec = new PayrollRecord(employee.getName(), employee.calculatePay());
payroll.add(payRec);
}
return payroll;
}
staff是可以通过此方法添加到列表中的Employee类对象的列表:
public void addEmployee(Employee employee) {
staff.add(employee);
}
Employee也是由其他几个类实现的接口 - Manager,SalesAssociate和StoreEmployee。 (你能告诉我我正在尝试完成作业吗?也许你们中的一些人很熟悉)。
PayrollRecord类看起来像这样:
package my.package.ext;
public class PayrollRecord {
private String employeeName;
private double currentPay;
public PayrollRecord(String employeeName, double currentPay) {
}
public double getCurrentPay() {
return this.currentPay;
}
public String getEmployeeName() {
return this.employeeName;
}
}
因此,在测试类中,我应该能够为员工信息创建一些变量,向员工添加一些员工,然后运行processPayroll方法并对其执行一些断言。我的测试类目前看起来像这样(并且还需要更多的断言。在我能解决这个基本问题之前,我不打算添加它们):
@Test
public void testPayroll() {
List<PayrollRecord> list = store.processPayroll();
assertEquals(managerTestPay, list.get(0).getCurrentPay(), 0);
}
根据我在测试类别中添加的员工数量,应该有五个。我可以将list.get设置为超出边界并验证确实存在5.然而问题是所有5条记录都为null且为0.0。我应该有一个名字并支付每个员工的记录。然而,断言错误返回显示我的预期,但实际值为0.0(当我尝试list.get(0).getName())时为null。
提前感谢您的帮助和智慧。
答案 0 :(得分:2)
你设置会员怎么样?
private String employeeName;
private double currentPay;
public PayrollRecord(String employeeName, double currentPay) {
}
在构造函数中,您需要分配给成员,例如
this.employeeName = employeeName;
仅使用参数调用构造函数是不够的。需要使用参数来填充类的成员(直接或通过一些操作)。
这里有用的技巧是将成员变量设置为final
。这意味着:
您可能认为这是一个限制。然而,很多时候你会发现你只设置了一次这个信息(我怀疑你的任务名称和工资将保持不变)。如果您需要更改其中一个,则很容易删除final
资格。
private final String employeeName;
private final double currentPay;
public PayrollRecord(String employeeName, double currentPay) {
this.employeeName = employeeName;
// etc...
}
确保成员不会更改意味着类实例是不可变的。这通常是件好事。很容易推理和调试不可变类,它们是隐式线程安全的。
答案 1 :(得分:0)
您没有将构造函数参数分配给类变量。将构造函数更新为:
public PayrollRecord(String employeeName, double currentPay) {
this.employeeName = employeeName;
this.currentPay = currentPay;
}