【发布时间】:2018-02-18 19:34:07
【问题描述】:
我的问题是:编写具有通过stdin 初始化的字段的 Java 类的构造函数的最佳方法是什么?
例如,假设我有一个 Employee 类,看起来像:
Public class Employee {
private int empID;
private String empName;
private List<Role> empRoles;
{....}
}
我可以为这个类编写所有的 setter 和 getter。当然,Role 类会有自己的文件。
还假设我为前两个字段设置如下,以使最终用户能够初始化字段:
public void setEmpID() {
System.out.println("Please enter the employee ID");
Scanner s = new Scanner (System.in);
this.empID = s.nextInt();
public void setEmpName() {
System.out.println("Please enter the employee name");
Scanner s = new Scanner (System.in);
this.empName = s.next();
}
然后:
- 我可以在覆盖默认值的构造函数中使用这样的设置器吗 构造函数。
- 这是编写此类构造函数的最佳方式吗?
- 将我在每个 setter 中创建的
Scanner对象移动到构造函数并将其作为 setter 的参数是否更好
例如:
public void setEmpName(Scanner s) {
...
this.empName = s.next();
}
如您所见,这可能是一个设计问题,而不仅仅是“编码”。
非常感谢您的帮助。
【问题讨论】:
-
您的二传手不应使用
Scanner。将要设置的数据传递到方法中。如果您想根据文件中的某些数据设置字段怎么办?还是来自互联网?强制使用Scanner确实限制了您的课程的有用程度。 -
setter 应该获取要设置为方法参数的值。用户输入应该在之前的另一点进行。在设计用于获取所有用户输入的指定方法或类中。这样你就可以轻松地在之后交换输入源,并且基类不需要任何更改,它更加模块化。
-
非常感谢。明白了:)
标签: java design-patterns constructor