“方法的结果被忽略”-这意味着什么?

suk*_*uku 2 java android

对于某些方法,我会收到警告。这就是扩展时所说的。以下代码(mkDirs())给出警告

if (!myDir.exists()) {
     myDir.mkdirs();
}
Run Code Online (Sandbox Code Playgroud)

报告对特定方法的所有调用,其中调用的结果被忽略。检查检查设置中指定的两种方法以及用org.jetbrains.annotations.Contract(pure = true)注释的方法。对于许多方法,完全忽略结果是合理的,但是对于某些方法,几乎​​可以肯定是一个错误。可能忽略错误结果的方法示例包括java.io.inputStream.read()(返回实际读取的字节数),java.lang.String或java.math.BigInteger上的任何方法,因为所有这些方法都是无副作用的,因此如果被忽略,则毫无意义。

这是什么意思?如何避免呢?应该如何解决?

小智 12

可以使用注释省略警告

@SuppressWarnings("ResultOfMethodCallIgnored")
public void someMethod() {
  ...
  myDir.mkdirs();
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果目录存在,该mkdir()操作将返回false,如果不存在,则会创建该目录(当然,如果您具有适当的权限),因此,恕我直言,isExists()可以省略检查 via 。

但是,如上所述,如果您正在使用此目录,最好确保它存在。


Riy*_*ara 5

(编译)警告消息确实表明了这一点:

File.mkdir()的结果被忽略

这样的事情。它告诉您正在忽略mkdir()调用的结果,该结果告诉您是否已创建目录。

避免警告的一种方法是测试结果并采取适当措施。另一个方法是将结果简单地分配给一个临时变量,将其忽略,然后(可能)稍后崩溃,因为该目录不是在应有的时候创建的。

如有其他错误,请随时修改代码。

既然您询问了... Java变量名称使用匈牙利表示法是错误的样式。Java是一种强类型语言,其中所有变量都有明确的声明类型。您不需要那种令人费解的标识符约定的精神拐杖来告诉您变量的类型是什么。

您可以通过以下方式处理

1)

boolean isDirectoryCreated= path.mkdirs();
Run Code Online (Sandbox Code Playgroud)

并忽略“ isDirectoryCreated”

2)(推荐)

boolean isDirectoryCreated= path.exists();
 if (!isDirectoryCreated) {
     isDirectoryCreated= path.mkdirs();
 }
 if(isDirectoryCreated) {
    // do something
 }
Run Code Online (Sandbox Code Playgroud)

  • 这可以简化为`boolean isDirectoryCreated = path.exists()|| path.mkdirs();` (2认同)

小智 1

此方法建议您使用指定路径创建目录,如果尚未创建目录,则此函数将为您创建一个新目录。它返回真/假天气目录存在或已创建。也许在某些情况下,由于存储空间不足,它未在指定路径创建,并且您尝试将内容写入该目录中的文件中,它将抛出 ioException。因此您应该利用 if 条件

if(myDir.mkdirs())
{
   //execute what ever you want to do
}
else
{
   // show error message for any failure.
}
Run Code Online (Sandbox Code Playgroud)