gpt4 book ai didi

java - 在有意义的情况下,我是否应该总是更喜欢成员变量而不是参数方法?

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:08 24 4
gpt4 key购买 nike

只有当这个值代表某个对象的状态时,将值作为一个字段才有意义。

我想知道在某些情况下是否应该避免这种“规则”。

这里有一个例子,假设这个类:

public class DbCar {

private ResultSet rs;

public DbMapper(ResultSet rs) {
this.rs = rs;
}

public Car buildObject(){
//.....does some mappings, then returns the builded car ....
}
}

因此我们看到 ResultSet 存储为一个成员变量,这是有意义的,因为每个 DbMapper 像 DbCar 都操作从 JDBC 查询中检索到的 ResultSet。

我们会有一个如下所示的调用者:

while (rs.next()) {
items.add(new DbCar(rs)).buildObject();
}

但假设当前查询返回了 15000 条记录。

简而言之,创建了 15000 个 DbCar 对象实例。

所以我的问题是:垃圾收集器是否足够高效,以至于我不应该担心如此庞大的实例数量?

当然,为了避免所有这些情况,我们可以重构代码如下:

public class DbCar {

public Car buildObject(ResultSet rs) {
//.....does some mappings, then returns the builded car ....
}
}

在这种情况下,将创建 DbCar 的单个实例(在当前线程和当前方法中),调用者如下所示:

DbCar dbCar = new DbCar();
while (rs.next()) {
items.add(dbCar.buildObject(rs));
}

那么,我应该选择哪种解决方案?相信使用更优雅的代码或使用局部参数方法的更程序化编码风格的垃圾收集器?

为了让选择变得更难,假设 DbCar 类将其“构建”方法划分为优雅的小方法,每个小方法都专用于特定的职责,例如:

“buildEngine”、“buildDoors”等...在选择本地参数的情况下,我必须将 ResultSet 传递到所有这些方法中...这不是很无聊和重复吗?

最佳答案

第二个更好。 15000 个对象对垃圾收集器来说不算什么,但不建议卡在结果集对象上。 #2 因为这个原因更好

关于java - 在有意义的情况下,我是否应该总是更喜欢成员变量而不是参数方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9932855/

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