链接方法时无法取消引用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方法不返回结果。