为什么没有必要将方法的返回值赋给变量?
可能重复:
如果您没有引用它,那么Java中的对象会发生什么,例如:myString.concat(“that”)
public class ReturnTest { public static void main(String[] args) { ReturnTest rt = new ReturnTest(); rt.show(); } public String show() { return "Hello"; } }
在上面的代码中, show()
方法返回一个String
值,该值不被任何变量捕获。 编译器和JVM都不会引发任何警告,错误或exception。 原始返回类型也是如此。 为什么?
编译器是否应该确保方法返回的重要值没有丢失?
我怎么能从shell修复这个?
这是语言的设计。
在许多情况下,方法返回您不关心的值。 例如, StringBuilder.append()
返回对象本身。
确实,在某些情况下,重要的返回值可能会丢失。 例如, InputStream.skip(long n)
返回跳过的字节数。 并且read
返回读取的字节数。 有一些工具( Checkstyle , FindBugs )可以检测到这些错误。 但语言本身并不要求检查返回值。 即使这样,程序也可以选择忽略该值。
因为您不一定需要返回的值。
如果应始终使用其返回值,则可以使用@CheckReturnValue
注释方法。 像FindBugs这样的静态代码分析会考虑这个注释,并在您违反时引发警告。
当方法返回某种需要在调用者负责的末尾进行最终处理的对象时,至少这是非常合理的。 对于必须在最后关闭的资源,情况确实如此。 必须在最后释放的锁……
在java函数中不是纯函数,因此它们可能仅针对副作用运行。 只是在这种情况下没有副作用……考虑一下
public String show() { System.out.println("Hello"); return "Hello"; }
你想要一个警告吗? 编译器无法知道您是否为副作用或值运行它,为什么坚持?