java – 在自己的构造函数中使用对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在自己的构造函数中使用对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1783字,纯文字阅读大概需要3分钟。
内容图文
![java – 在自己的构造函数中使用对象](/upload/InfoBanner/zyjiaocheng/746/dde6bb209101459f99c68bfe1df3ef15.jpg)
在它自己的构造函数中使用对象是否可能(或明智)?(对于制作不当的noob问题抱歉)
假设我有一个“学生”类,其中包含子类Student的arrayList和一个将新学生添加到数组的方法.
我可以在我的Student构造函数中使用addStudent方法在创建时将新实例添加到数组中吗?…像这样:
//Students
class Students{
private static ArrayList<Student> STUDENTS = new ArrayList<>();
public static void addStudents(Student student){
STUDENTS.add(student);
}
}
//Student
class Student /*extends Students <- old misstake left for reference*/{
private String name = "";
private int birthYear = 0;
Student(String _name, int _birthYear){
this.name = _name;
this.birthYear = _birthYear;
//insert wild guess
Students.addStudents(this(name,birthYear));
}
}
或者这会简单地循环并创建很多对象,直到一切崩溃?
解决方法:
您可以;你不应该.
一个原因是您可能并不总是希望将所有Student实例添加到同一个共享列表中.例如,如果您在单元测试中创建Student实例,并将它们添加到构造函数的Students列表中,则必须担心在测试后清除列表,以避免在测试之间意外共享状态.
另一个原因是在构造函数中添加实例称为unsafe publication.您正在提供对尚未完全初始化的实例的引用.这可能会导致一些非常棘手的错误,尤其是与并发性相关的错误.
在执行任何操作之前,您应该始终等待实例完全初始化(即一个新的Whatever返回).
您最好将创建学生与添加到学生列表中脱钩.使用工厂方法创建学生:
class Students{
private static ArrayList<Student> STUDENTS = new ArrayList<>();
public static void addStudents(Student student){
STUDENTS.add(student);
}
// Factory method.
public static Student createAndAddStudent(String name, int birthYear) {
Student student = new Student(name, birthYear);
addStudents(student);
return student;
}
}
就您当前的代码而言,您不需要扩展学生.从逻辑上讲,学生不是学生,不仅仅是汽车不是汽车(大声说出来;它只是没有意义).
您需要做的就是调用静态方法:
class Student {
Student() {
// ...
Students.addStudents(this);
// ...
}
}
内容总结
以上是互联网集市为您收集整理的java – 在自己的构造函数中使用对象全部内容,希望文章能够帮你解决java – 在自己的构造函数中使用对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。