使用Checker Framework,构造函数使用的方法可以使用@UnderInitialization
带注释的参数。
从非构造函数调用此类方法并向其传递@Initialized
参数会导致以下错误:
error: [argument.type.incompatible] incompatible types in argument.
found : @Initialized <Object>
required: @UnderInitialization <Object>
我不确定这是一个问题,因为传递@Initialized
值不应该有副作用。
解决此错误的正确方法是什么?
答案 0 :(得分:1)
类型检查警告对我来说是正确的。
要了解此问题,请考虑type hierarchy of the initialization type system。
@Initialized
和@UnderInitialization
是类型层次结构中的兄弟。在需要@Initialized
时提供@UnderInitialization
比在需要List
时提供Date
更合法。
如果您的方法适用于初始化的值和初始化值,那么您可以将其参数注释为@UnknownInitialization
,这是@Initialized
和@UnderInitialization
的超类型