1

使用Checker Framework,构造函数使用的方法可以采用带@UnderInitialization注释的参数。

从非构造函数调用这样的方法并将@Initialized参数传递给它会导致以下错误:

error: [argument.type.incompatible] incompatible types in argument.

found   : @Initialized <Object>
required: @UnderInitialization <Object>

我不确定这是不是一个问题,因为传递一个@Initialized值不应该有不良的副作用。

解决此错误的正确方法是什么?

4

1 回答 1

2

类型检查警告对我来说是正确的。

要理解这个问题,请考虑初始化类型系统的类型层次结构@Initialized并且@UnderInitialization是类型层次结构中的兄弟姐妹。@Initialized在需要时@UnderInitialization提供 a 并不比在需要 aList时提供 a更合法Date

如果您的方法适用于已初始化的值和正在初始化的值,那么您可以将其参数注释为@UnknownInitialization两者的超类型@Initializedand @UnderInitialization

于 2016-06-16T21:23:38.793 回答