在描述服务的界面中,我有与此类似的方法:
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中,而是在现实中(例如,在Kotlin中)。
不幸的是,Lombok不能做得更好,它可以访问接口(不是父类)。
有些工具可以帮助您持续地做到这一点(但是我还没有尝试过),或者您可以编写一个简单的基于反射的测试。然后,您仍然会被迫编写多余的内容,但是如果您忘记了,则会得到提醒。