【问题标题】:Intellij IDEA Contract false-positive syntax errorIntellij IDEA Contract 误报语法错误
【发布时间】:2026-02-06 08:15:02
【问题描述】:

虽然我做得对,但我遇到了错误(我认为)

@Contract("!null -> !null, _, _, _; null -> null, _, _, _")
public <T> T deserialize(@Nullable final Object object, @Nullable final GenericDeclaration genericSource, @NotNull final Class<T> targetClass, @Nullable final GenericDeclaration genericTarget) {

基本上,我正在尝试创建一个合同,如果第一个参数为 null,则返回 null,否则不为 null。但是我不想在合约中添加其他参数,或者只是用_ 键忽略它。

Intellij IDEA 版本为 2021.1.2(最新版本)

它抱怨返回值,我不知道为什么?

yellow error

【问题讨论】:

  • 返回值在签名之后,如the docs

标签: java intellij-idea contract


【解决方案1】:
@Contract("!null, _, _, _ -> !null; null, _, _, _ -> null");

我猜。参数列表 -> 结果; ...见Syntax

【讨论】:

  • 哦,所以一个子句应该只有一个返回值。
  • @portlek 这里可以只有一个返回值;它是 Java。