链接方法时无法取消引用Void
我试图像这样使用PrintWriter:
new PrintWriter("/tmp/test.csv", "UTF-8") .println("1,1,1") .close();
但Java抱怨说:
虚空无法解除引用
如果我做:
PrintWriter pw = new PrintWriter("/tmp/test.csv", "UTF-8"); pw.println("1,1,1"); pw.close();
它有效,有什么原因吗?
是。 PrintWriter.println(String)
(以及其他println
方法)的签名返回void
(不是PrintWriter
)。 您不能将调用链接到void
方法。
PrintWriter.println
不会返回任何内容,因此您在void
(即没有 )上调用close
,而不是在PrintWriter
对象上调用。
println来源。 你可以看到这是一个公共空白。
为了菊花链实际工作,它必须是
public PrintWriter println(char x) { synchronized (lock) { print(x); println(); } return this; }
对于所有不同类型的接受参数当没有返回任何内容时,则不可能进行链接。
您可以扩展printwriter,并创建自己的可链接方法。
您不能将close()
应用于println()
。 只对象本身。 所以代替a.println().close();
使用a.println(); a.close()
a.println(); a.close()
。
当然有一个原因。 println
方法不返回结果。