我已经有很长时间了,对于大多数具有独特属性的Java类,开发人员应该花时间重写Object.toString() ,即使它只是通过IDE生成的实现或使用诸如Apache之类的库类来实现Commons Lang的ToStringBuilder 。 如果要手动实现toString
,则重载的Objects.toString() 方法也比以往更容易实现。 随J2SE 5 引入的JDK类FutureTask最终在JDK 10中获得了自己的toString()实现 。
理查德·尼科尔斯 ( Richard Nichols )在2012年发表的文章“ 如何获取Java执行器的运行任务… ”突出显示了FutureTask类上toString()
方法的省略。 他写了:
该API不包含任何方式收集有关内部事件的信息,这似乎很奇怪。
执行器 ,甚至没有
toString()实现,用于包装类似的类
FutureTask会冒泡您
可运行或
可调用类
toString()方法。
Nichols的帖子是在他的观察的背景下得出的:“在运行时实际上很难公开……Java的Executor在任何时间点实际上正在做什么。”
发行JDK-8186326 [“使“任务”对象的toString()方法更有用”]讨论了如何将FutureTask
toString()
与CompletableFuture的对齐,该问题指出“已经有一个有用的toString方法 ,给出了当前状态。” 一个电子邮件线程在2017年后期文档中添加围绕讨论toString()
以FutureTask
等“在JUC任务类”( java.util.concurrent中 )。
Javadoc注释了新的FutureTask.toString()方法状态,“默认实现返回一个标识此FutureTask及其完成状态的字符串。 括号中的状态包含字符串“ Completed Normally
”,“ Completed Exceptionally
”,“ Cancelled
”或“ Not completed
”之一。” FutureTask
的toString()
的这四个潜在完成状态中的三个也有可能被写为CompletableFuture
的toString()
[“ Cancelled
”是例外)。
在JDK 10中,将toString()
的特定实现添加到FutureTask
类中只是一小部分。 但是,对于开发人员“如诊断JDK-8186326的“问题”语句中所述,在诊断应用程序故障时盯着“任务”对象(Runnables,Callables,Future)的toString的输出”,此“少量”添加可能是非常欢迎。
翻译自: https://www.javacodegeeks.com/2018/02/jdk-10-futuretask-gets-tostring.html