Java 为什么describeConstable是可选的?

Java 为什么describeConstable是可选的?,java,java-12,Java,Java 12,在什么情况下,someEnum.descripbeconstable()无法返回EnumDesc i、 e.它将返回一个空的可选的方法源于接口,而不是源于。从的文档: constable类型实例的标称形式通过以下方式获得:A不需要(或可能选择不)以A的形式描述其所有实例;此方法返回可以为空的,以指示无法为实例创建标称描述符。(例如,将为直接方法句柄生成标称描述符,但不一定是由方法句柄组合器生成的描述符。) 看到Java了吗™ 虚拟机规范: 4.4常量池,4.4.10常量调用动态信息结构 d

在什么情况下,
someEnum.descripbeconstable()
无法返回
EnumDesc

i、 e.它将返回一个空的
可选的

方法源于接口,而不是源于。从的文档:

constable类型实例的标称形式通过以下方式获得:A不需要(或可能选择不)以A的形式描述其所有实例;此方法返回可以为空的,以指示无法为实例创建标称描述符。(例如,将为直接方法句柄生成标称描述符,但不一定是由方法句柄组合器生成的描述符。)

看到Java了吗™ 虚拟机规范:

4.4常量池,4.4.10常量调用动态信息结构

descripbeconstable()
是从接口继承的方法,其中的描述为:

如果可以构造,则返回包含此实例的标称描述符的
Optional
,如果无法构造,则返回空的
Optional

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

返回一个
可选
,其中包含此实例的标称描述符,即实例本身

但返回值是可选的,因为并非所有接口实现都是如此

的javadoc中有这样一句话:

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


@谢谢你解释我在看什么。我感到惊讶的是,Enum的文档中没有更具体地描述它的
describeConstable
实现。这就是说,在任何地方指定
Enum
都不会在此处返回空的
可选的
。@WilliamEntriken:“对于此实例,如果可以构造,则返回枚举描述符
EnumDesc
,如果不能构造,则返回空的
可选的
。-不太具体