gpt4 book ai didi

java - 逐步构建对象,同时避免空值

转载 作者:行者123 更新时间:2023-11-30 11:41:51 24 4
gpt4 key购买 nike

我有一个抓取工具,可以扫描网页中的特定信息片段并根据它们创建一个对象。其中一个属性是 id,稍后用于查询新对象的剩余属性

因为构建这个对象的责任被分成几个类(爬虫类和使用其中一个属性查询的类),我想避免使用传递一个Builder(另外,带有访问器的构建器模式对我来说似乎很奇怪)。

同时,我想在正在构建的对象中避免空引用

Guava 的 Optional 似乎也不太适合,因为对象的所有构造步骤完成后,对象的属性肯定不会为 null。

我可以像这样创建单独的类:

class ScrapeablePersonImportPart {

String surname;
Year yearOfBirth;
String externalId;

// ... getters, constructor ...

}

class PersonImport extends ScrapeablePersonImportPart {

SocialSecurityNumber ssn;
Color favoriteColor;

// ... getters, constructor ...

PersonImport( ScrapeablePersonImportPart part, SocialSecurityNumber ssn, Color favoriteColor ) {
this.surname = part.getSurname();
this.yearOfBirth = part.getYearOfBirth();
this.externalId = part.getExternalId();
this.ssn = ssn;
this.favoriteColor = favoriteColor;
}

}

或者我可以避免子类化并改用组合。

随着程序的发展,构造很可能包含更多步骤

具有多个独立类的解决方案看起来合理吗?

最佳答案

我会改用组合,因为你传入一个 ScrapeablePersonImportPart 你可以委托(delegate)给它而不是继承它。由于您可能有一个新的 XYZPart 被传入,因此委托(delegate)是有意义的,因为无论如何您都无法继承。

如果这些只是用于保存动态数据字段的虚拟对象,我很想使用 HashMap

关于java - 逐步构建对象,同时避免空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098778/

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