为什么describeConstable是可选的?

Wil*_*ken -1 java java-12

在什么情况下将someEnum.describeConstable()无法返回EnumDesc

即它将返回一个空Optional

Tur*_*g85 5

该方法Optional<? extends ConstantDesc> describeConstable()源于接口Constable,而不是来自Enum. 来自Constable\的文档:

\n
\n

...

\n

常量类型实例的名义形式是通过 获得的describeConstable()AConstable不需要能够(或可以选择不)以 a 的形式描述其所有实例ConstantDesc;此方法返回一个Optional可以为空的值,表示无法为实例创建名义描述符。(例如,MethodHandle将为直接方法句柄生成名义描述符,但不一定是由方法句柄组合器生成的描述符。)

\n

...

\n

请参阅 Java\xe2\x84\xa2 虚拟机规范:

\n

4.4 常量池,4.4.10 CONSTANT_InvokeDynamic_info 结构

\n

...

\n
\n


And*_*eas 5

describeConstable()是从interface继承的方法Constable,其中的描述是:

返回一个Optional含有标称描述此实例中,如果一个可被构造,或Optional,如果一个人不能被构建

当然,在某些类中,例如Integer,它永远不能为

返回一个Optional包含此实例的标称描述符的实例,它本身就是实例

但是返回值是,Optional因为对于接口的所有实现而言并非如此。

的javadoc Constable这样说:

警员不必(或可以选择不)以的形式描述其所有实例ConstantDesc;此方法返回Optional,可以为空,以指示无法为实例创建名义描述符。(例如,MethodHandle将为直接方法句柄产生标称描述符,但不一定由方法句柄组合器产生。