我正在学习scala。我想在scala方法参数上放置一个java注释(让我们说lombok的@NotNull
)。但是当我写道:
def a(@NotNull o : Object) = {}
我收到编译错误:trait NotNull is abstract; cannot be instantiated
。
PS。我不是问如何确保scala中不为null。我在问如何使用java注释
答案 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注释处理器。
由于这些都没有用,你可能想要四处寻找替代方案。