我应该用@NonNull批注标记接口及其实现吗?

问题描述 投票:1回答:1

在描述服务的界面中,我有与此类似的方法:

TaskCard saveTaskCard(@NonNull TaskCard card, User user);

我在参数前加上了@NonNull(lombok)批注,但是如果实现中没有相同的批注,它将无法单独工作。这意味着在实现该接口的类的方法中,我将需要再次放置此注释,从而复制代码。

@Override
@Transactional
public TaskCard saveTaskCard(@NonNull TaskCard taskCard, User user) {
    taskCard.setUser(user);
    return repository.save(taskCard);
}

问题是,应该如何?如果仅将此注释放在接口中,则它们将不起作用,并且如果仅将其放在实现该接口的类中,则API用户可能无法理解无法将null传递给这些方法。我该怎么办?

java spring spring-mvc spring-data lombok
1个回答
1
投票

恕我直言,您肯定会由于您陈述的原因而将其复制:

  • 将其放在界面上,以便用户看到它
  • 将其放入实现中,以便Lombok可以对其进行检查

这只是多余的,当您不认为可空性实际上是该类型的一部分时-不是在Java中,而是在现实中(例如,在Kotlin中)。

不幸的是,Lombok不能做得更好,它可以访问接口(不是父类)。

有些工具可以帮助您持续地做到这一点(但是我还没有尝试过),或者您可以编写一个简单的基于反射的测试。然后,您仍然会被迫编写多余的内容,但是如果您忘记了,则会得到提醒。

© www.soinside.com 2019 - 2024. All rights reserved.