您可以将类名称作为scala注释的常量吗?

问题描述 投票:5回答:1

我有一个annotation,它需要一个描述类名的字符串,例如com.package.MyClass

我可以将其作为字符串传递,但希望它引用类本身进行编译/重构。

但是我不能使用MyClass.getName.classOf[MyClass].toString,因为它不是常数:

Compilation error[annotation argument needs to be a constant

是否有一种方法可以获取对类名的const引用?还是在注释中以字符串形式引用类名称的另一种方法?

scala annotations
1个回答
0
投票

您不能使用classOf,因为它在运行时上运行,并且Java批注要求使用常量作为参数。相反,您可以在编译期间使用宏捕获类的名称。

我建议您使用一些可以做到这一点的库,例如NameOf

添加对build.sbt的依赖:

libraryDependencies += "com.github.dwickern" %% "scala-nameof" % "1.0.3" % "provided"

然后您可以像这样使用它:

import com.github.dwickern.macros.NameOf._

@ApiImplicitParams(Array[ApiImplicitParam](
   new ApiImplicitParam(
     name="Something",
     dataType= qualifiedNameOfType[com.package.MyClass])
   )
)
© www.soinside.com 2019 - 2024. All rights reserved.