Java 注解 javaArgs 和 LiteralArguments 已弃用

标签 java scala annotations

我在使用 Java 注释时遇到问题,因为某些函数已被弃用,而且我不知道如何使用建议的“Annotation.tree”来编写它。

这里是已弃用的代码:

lazy val lengthOfAnnotation = p.annotations.find(_.tpe == ru.typeOf[Len])
lazy val maxLength = lengthOfAnnotation.get.javaArgs.head._2.asInstanceOf[ru.LiteralArgument].value.value.asInstanceOf[Int]

这是不起作用的新代码:

lazy val lengthOfAnnotation = p.annotations.find(_.tree.tpe == ru.typeOf[Len])
lazy val maxLength = lengthOfAnnotation.get.tree.children.tail.head.tpe.value.asInstanceOf[Int]

错误:

method javaArgs in trait AnnotationApi is deprecated: Use tree.children.tail instead

type LiteralArgument in trait Annotations is deprecated: Use Annotation.tree to inspect annotation arguments

method value in trait LiteralArgumentApi is deprecated: Use Annotation.tree to inspect annotation arguments

最佳答案

我找到了一个解决方案,它现在正在运行。

    import scala.reflect.runtime._
    import scala.reflect.runtime.universe._
    lazy val lengthOfAnnotation = p.annotations.find(_.tree.tpe == ru.typeOf[Len])
    val result = lengthOfAnnotation.flatMap { a =>
      a.tree.children.tail.head.collect({ case Literal(Constant(value)) => value }).headOption
    }
    lazy val maxLength = result.get.value.asInstanceOf[Int]

关于Java 注解 javaArgs 和 LiteralArguments 已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39632100/

相关文章:

java - 返回使用 jsoup 从 url 检索到的图像数组

java , jpa 强制转换异常

java - 获取带有注释的所有类并将它们添加到android中的hashMap

java - 为什么java看不到我的注释?

cmd 中的 java.lang.NoClassDefFoundError

java - 如何解决警告: This AsyncTask class should be static or leaks might occur

performance - IndexedSeq.last 复杂度

scala - Bi 的名称 - 具有一个逆变参数和一个协变参数的仿函数类型类

scala - 对连续元素具有类型约束的列表

java - 在 Java 中使用注解进行授权检查