具有最终用户馈送字段的类的Java构造函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了具有最终用户馈送字段的类的Java构造函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2016字,纯文字阅读大概需要3分钟。
内容图文
![具有最终用户馈送字段的类的Java构造函数](/upload/InfoBanner/zyjiaocheng/761/a97fd462bcb84d67b84be03bd4073021.jpg)
我的问题是:使用通过stdin初始化的字段编写Java类构造函数的最佳方法是什么?
例如,假设我有一个类似于的Employee类:
Public class Employee {
private int empID;
private String empName;
private List<Role> empRoles;
{....}
}
我可以为这堂课写下所有的二传手和门手.当然,Role类将拥有自己的文件.
还假设我为前两个字段创建了我的setter,如下所示,以便让最终用户初始化字段:
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
构造函数.
>这是编写此类构造函数的最佳方法吗?
>将我在每个setter中创建的Scanner对象移动到构造函数并将其作为setter的参数更好
例如:
public void setEmpName(Scanner s) {
...
this.empName = s.next();
}
如您所见,这可能是一个设计问题,而不仅仅是“编码”.
非常感谢您的帮助.
解决方法:
实际上,您不依赖于使用特定构造函数填充对象字段的方法,而是依赖于无参数构造函数.
在调用新的Employe()之后,您确实选择了setter方法来填充Employee实例的字段.
但是这种setter方法很复杂,因为你混合了太多的责任:获取用户输入和设置对象的状态.
Can I use such setters in a constructor that overrides the default
constructor.
不,这没有任何意义:构造函数和setter是两种不同的方式,你不能用另一种方式覆盖它们.
然而,你可以依靠一个Scanner实例来调用构造函数中的setter来获取用户输入,但与你的实际setter方法类似,这似乎是一种尴尬的方法,因为它给构造函数带来了太多的责任.
Is this the best way to write such constructors?
使用填充所有字段的构造函数,即:
Employee emp = new Employe(id, name, roles)
如果您的对象在创建后被设计为不可变的,那么这是有意义的.
在您的实际情况中,如果您的对象不是使用构造函数设置为不可变的,或者setter是有效的,但无论如何,您应该提供setter.
因此,要回答您的问题,您应该分离职责(获取用户输入和设置对象状态),并根据您对Employee实例的要求使用setter或构造函数方法:
Employee emp = new Employe(id, name, roles)
要么
Employee emp = new Employe();
emp.setId(...);
emp.setName(...);
emp.setRoles(...);
内容总结
以上是互联网集市为您收集整理的具有最终用户馈送字段的类的Java构造函数全部内容,希望文章能够帮你解决具有最终用户馈送字段的类的Java构造函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。