我有一个annotation,它需要一个描述类名的字符串,例如com.package.MyClass
。
我可以将其作为字符串传递,但希望它引用类本身进行编译/重构。
但是我不能使用MyClass.getName.
或classOf[MyClass].toString
,因为它不是常数:
Compilation error[annotation argument needs to be a constant
是否有一种方法可以获取对类名的const引用?还是在注释中以字符串形式引用类名称的另一种方法?
您不能使用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])
)
)