【问题标题】:java annotation on scala method parameterscala方法参数上的java注释
【发布时间】:2014-03-14 16:36:05
【问题描述】:

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

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

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

ps。我不是在问如何确保在 scala 中不为空。我在问如何使用java注解

【问题讨论】:

    标签: scala syntax annotations


    【解决方案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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 你是对的。我的 ide 混淆了注释。修复后我没有更多的编译器错误。仍然没有检查 lombok 是否适用于 scala
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多