gpt4 book ai didi

java - 哪个是更好的构造函数?空的还是使用字段?

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:43 25 4
gpt4 key购买 nike

我目前正在上 Android 类(class),当我获得第一个作业成绩时,由于使用空构造函数而不是使用带字段的构造函数,我丢了分。教授说使用字段更好。他是对的吗?如果是,为什么?

这样更好吗?

Photos pic = new Photos(path, title, author, date);

public Photos(String url_path, String title, String author,
String date_taken) {
super();

this.url_path = url_path;
this.title = title;
this.author = author;
this.date_taken = date_taken;
}

还是这个?还是重要?

 Photos pic = new Photos();
pic.setUrl_path(path);
pic.setTitle(title);
pic.setAuthor(author);
pic.setDate_taken(date);

public Photos() {
super();

}

最佳答案

两者都不是“更好”,它们只是做不同的事情。哪一个在主观上“更好”取决于你想通过该类(class)实现什么。例如考虑这段代码:

Photos pic = new Photos();
pic.setUrl_path(path);
pic.setTitle(title);
pic.setAuthor(author);
pic.setDate_taken(date);

紧接着第一行,pic 对象是否处于有效状态?没有设置任何值会导致有意义且上下文完整的 Photos 对象吗?如果答案为“否”,并且如果要设置的字段必需才能拥有有效的 Photos 对象,那么构造函数应该需要它们。

也就是说,构造函数的工作是确保只创建一个有效的实例。永远不要假设消费代码会跟进 setter ,它可能不会。确保对象有效状态的工作是一种责任,应该封装在对象中。

另一方面,如果无参数构造函数可以创建Photos 的有效实例,那么使用无参数构造函数是完全可以接受的。您可以同时拥有两者,因此使用代码可以根据希望创建的状态选择使用哪个:

public Photos() {
// set default values
}

public Photos(String url_path, String title, String author, String date_taken) {
// set supplied values
}

这完全取决于 Photos 对象的有效状态以及实现该状态所需(或不需要)的内容。

关于java - 哪个是更好的构造函数?空的还是使用字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26238381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com