gpt4 book ai didi

java - 延迟初始化完整性检查 : Variable might not have been initialized

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

我正在结合现有的导入和导出功能,以减少在连接确实被拒绝的情况下用户被告知连接被拒绝的次数。我正在调用的库具有单独的导入和导出功能,以及组合的导入/导出功能。导出函数需要导出文件列表,而组合函数自己计算出列表(并在内部使用此列表调用导出函数)。由于用户可以关闭导入或导出,因此我只想在必要时获取文件列表。

我想出了这个代码:

List<File> files;
if (mExport)
files = ListFiles();

if (mExport && mImport && files.size() > 0) // Error is on files
DoExportAndImport();
else if (mImport)
DoImport();
else if (mExport && files.size() > 0) // No error here
DoExport(files);

第二个if语句被标记为错误 Variable 'files' might not have been initialized (但不是最后一个)。

帮我推理一下:if mExport为真,则files被初始化;但如果mExport是假的,那么第二个if语句短路,永远不会到达 files ,所以 files 并不重要还没有被初始化,因为它没有被使用。

我是不是忽略了什么,或者这种情况太复杂了,编译器无法解决?如果是后者,有没有办法告诉编译器将其关闭,我已经处理好了?

作为记录,正在初始化 files = new ArrayList<>()在声明中确实使编译器静音,files = null 也是如此。 ,尽管这显然会导致其他错误;但是初始化一个我知道永远不会以任何方式使用或引用的值感觉很浪费。

最佳答案

您的逻辑是合理的,因为每次引用 files 时,files 都会被初始化。但是,正如您所怀疑的那样,编译器并没有走那么远。它的静态分析不考虑变量的值来确定某个条件是否始终为真或假。

在这种情况下,如果 mExporttrue,编译器不会考虑初始化 files。它只看到 files 未从顶部 if 语句初始化的可能性,并且它是该语句下方的引用。

您可以通过重新安排您的逻辑来提供帮助,以便仅在 if 语句 block 中引用它。

List<File> files;
if (mExport) {
files = ListFiles();
if (mImport && files.size() > 0) {
DoExportAndImport();
} else if (files.size() > 0) {
DoExport(files);
}
} else if (mImport) {
DoImport();
}

关于java - 延迟初始化完整性检查 : Variable might not have been initialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56046801/

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