【问题标题】:"Result of method is ignored"- what does this imply?“方法的结果被忽略”——这意味着什么?
【发布时间】:2016-08-16 05:42:53
【问题描述】:

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

if (!myDir.exists()) {
     myDir.mkdirs();
}

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

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

【问题讨论】:

  • 目录创建成功返回true,失败返回false。第二种情况可能有很多原因,例如没有读/写权限(API 23+ 中的运行时),目录已经存在等。因此最好检查目录是否实际创建。

标签: java android


【解决方案1】:

(编译)警告消息确实是这样说的:

File.mkdir() 的结果被忽略

类似的东西。它告诉您您忽略了 mkdir() 调用的结果,该调用告诉您是否创建了目录。

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

如有其他错误欢迎随时修改代码。

既然你问了......使用匈牙利符号表示 Java 变量名是不好的风格。 Java 是一种强类型语言,其中所有变量都有明确声明的类型。你不应该需要一些可怕的标识符约定的精神拐杖来告诉你变量的类型是什么。

你可以通过这些方式处理

1)

boolean isDirectoryCreated= path.mkdirs();

并忽略“isDirectoryCreated”

2)(推荐)

boolean isDirectoryCreated= path.exists();
 if (!isDirectoryCreated) {
     isDirectoryCreated= path.mkdirs();
 }
 if(isDirectoryCreated) {
    // do something
 }

【讨论】:

  • 这里可以简化为boolean isDirectoryCreated = path.exists() || path.mkdirs();
【解决方案2】:

使用注解可以省略警告

@SuppressWarnings("ResultOfMethodCallIgnored")
public void someMethod() {
  ...
  myDir.mkdirs();
  ...
}

如果目录存在,mkdir() 操作将返回false,如果不存在,则创建它(如果你有适当的权限,当然),因此,恕我直言,通过@987654324 检查@ 可以省略。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      相关资源
      最近更新 更多