scala方法参数的java注释

时间:2014-03-14 16:36:05

标签: scala syntax annotations

我正在学习scala。我想在scala方法参数上放置一个java注释(让我们说lombok的@NotNull)。但是当我写道:

def a(@NotNull o : Object) = {}

我收到编译错误:trait NotNull is abstract; cannot be instantiated

PS。我不是问如何确保scala中不为null。我在问如何使用java注释

2 个答案:

答案 0 :(得分:1)

这是在scala中使用Java注释的正确方法

scala> import java.lang.annotation._
...
scala> def a(@Retention(RetentionPolicy.RUNTIME) o: Object) = {}
a: (a: Object)Unit

顺便说一下,NotNull是特定于scala的,这是导致错误的原因。 Martin Odersky explains this issue

答案 1 :(得分:1)

没有龙目岛@NotNull;有一个Scala @NotNull和一个Lombok @NonNull。

Scala的@NotNull从未正确实现,并且已在2.11中弃用(删除了实现)。见https://issues.scala-lang.org/browse/SI-7247。所以,如果这是主题,问题可能没有实际意义。

如果Lombok @NonNull在Scala源代码中工作,我会感到惊讶。 Lombok使用(Java)编译时注释处理器。由于Scala直接编译为字节码,因此不会调用Java注释处理器。

由于这些都没有用,你可能想要四处寻找替代方案。