gpt4 book ai didi

java - 为什么方法体内的 boolean 标志是一个坏主意?

转载 作者:行者123 更新时间:2023-11-30 02:18:26 25 4
gpt4 key购买 nike

假设我有如下内容,其中 DataImporter 是一个从文件系统检索数据的实用程序,并且其中包含子数据导入器,用于根据类别字符串从子文件夹中检索数据:

        List<String> categories = getCategories();
boolean doesChildImporterExist = false;
for (String category : categories)
{
DataImporter childDataImporter=importer.getChild(category);
if (childDataImporter != null)
{
doesChildImporterExist = true;
populateImportedData(childDataImporter.importData());
}
}
if(!doesChildImporterExist)
populateImportedData(importer.importData());

我知道另一个选项是构造一个子数据导入器的List,并检查其大小(如果为 0 或不为 0),并根据该大小使用所需的导入器导入数据。但是,我想了解此处使用 boolean 标志有什么问题?

假设上面的代码位于一个方法内并使用 Java 1.7

最佳答案

当您在方法中使用 boolean 标志作为分支决策器时(不是最好的术语),您实际上是将两种不同方法的功能合并为一种方法。

经常,更好的解决方案是有一个用于共享功能的方法和另一个用于超集功能的方法。

例如:

public DataImporter doYourCategoryStuff()
{
List<String> categories = getCategories();
... blah including the for loop.

return theDataImporter;
}


public void doAllTheStuffs()
{
final DataImporter theDataImporter;

theDataImporter.doYourCategorStuff();

populateImportedData(theDataImporter.importData());
}

编辑更多关于您的代码的要点。

在你的代码中, boolean 标志表示“我对子导入器做了一些事情,需要更新父导入器”。在这种情况下,您将“确定要更新的内容”和“进行更新”混在一起;将它们分开。

考虑这样的事情:

Set<DataImporter> updateSet = new HashSet<>();

for (category for loop)
{
final DataImporter child = importer.getChild(category);
if (child != null)
{
updateSet.add(child);
updateSet.add(importer);
}
}

for (final DataImporter current : updateSet)
{
current.importData();
}

尽管add(importer)(父级)可能会被多次调用,该集合仅包含每个 DataImporter 的一个实例。即使您没有在 DataImporter 上实现 hashCodeequals,这也应该是合理的,因为父引用始终是相同的。

关于java - 为什么方法体内的 boolean 标志是一个坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47578323/

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