我这里有一段代码,它将可能为空值的值赋给@NotNull
变量。
@NotNull String message = getMessage();
if (sender instanceof CommandSender) {
message = ChatColor.stripColor(message);
}
请注意,ChatColor.stripColor()
可以返回NULL,这会导致在Eclipse中出现警告。
Null类型不匹配(类型注解):需要‘@NotNull字符串’,但此表达式的类型为‘@Null able字符串’
我通过检查stripColor()
的结果并在出现空值时使用默认字符串来解决这个问题。
@Nullable String m = ChatColor.stripColor(message);
if (m == null)
m = "";
message = m;
虽然我更喜欢使用Eclipse,但我正在编写的代码正在提交给作者使用IntelliJ的项目。这种情况并不少见,我使用了他们的检查工具来检查任何其他可能在Eclipse中看不到的警告。我惊讶地发现,它在这一变化中存在问题。
但这怎么可能呢?它可以返回空!嗯,除非@Contract
说它可以。ChatColor.stripColor()
使用以下注解:
@Contract("!null -> !null; null -> null")
这是一个IntelliJ注解(org.jetbrains.annotations.Contract
),它说明如果输入为非空,则输出也为非空。在这种情况下,消息是非空的。ECLIPSE可以导入此注解,但似乎不考虑将其用于空分析。
现在我有个问题了。如果我不解决这个空类型不匹配的问题,我将在Eclipse中得到一个错误。我不想关闭这一功能,因为我想看到这种信息。但如果我尝试在代码中解析它,IntelliJ会抛出一个警告,因为@Contract
的结果是它有更多的信息。
有没有什么方法可以满足出现在Eclipse中的错误和出现在IntelliJ中的警告?
我也尝试使用Assert,但IntelliJ也标记了这一点:
@Nullable String m = ChatColor.stripColor(message);
assert(null != m);
message = m;
1条答案
按热度按时间mwngjboj1#
我会尝试使用私有方法来封装
stripColor
,并使参数可以为空。