Scala 中的自定义注解
Custom annotations in scala
我正在使用 Scala 编程语言。我想创建自定义注释来注释 case class.
的字段
this 线程展示了如何创建它,但我的场景面临两个问题
- 可以。在注释中。例如@abc.xyz
- 我想创建不带参数的注释。所以我无法创建 case classes
我该怎么做?
谢谢
广告。 1 - 你可以使用反引号在名称中包含 .
但我看到你应该这样做的 0 个理由(你可以将 xyz
放在 abc
包中)
// possible but it's anti-pattern
class `abc.xyz` extends scala.annotation.StaticAnnotation
case class Test(
@`abc.xyz` field: String
)
// better
package my.abc
class xyz extends scala.annotation.StaticAnnotation
// elsewere
import my.abc
case class Test(
@abc.xyz field: String
)
广告。 2 注释参数与大小写类有什么关系?注释不必是 case class
。有些人使用它是因为在宏中他们可以对物化注释值使用模式匹配,但仅此而已。
case class Foo() extends scala.annotation.StaticAnnotation
class Bar extends scala.annotation.StaticAnnotation
case class Test(
@Foo foo: String,
@Bar bar: String
)
我正在使用 Scala 编程语言。我想创建自定义注释来注释 case class.
的字段this 线程展示了如何创建它,但我的场景面临两个问题
- 可以。在注释中。例如@abc.xyz
- 我想创建不带参数的注释。所以我无法创建 case classes
我该怎么做?
谢谢
广告。 1 - 你可以使用反引号在名称中包含 .
但我看到你应该这样做的 0 个理由(你可以将 xyz
放在 abc
包中)
// possible but it's anti-pattern
class `abc.xyz` extends scala.annotation.StaticAnnotation
case class Test(
@`abc.xyz` field: String
)
// better
package my.abc
class xyz extends scala.annotation.StaticAnnotation
// elsewere
import my.abc
case class Test(
@abc.xyz field: String
)
广告。 2 注释参数与大小写类有什么关系?注释不必是 case class
。有些人使用它是因为在宏中他们可以对物化注释值使用模式匹配,但仅此而已。
case class Foo() extends scala.annotation.StaticAnnotation
class Bar extends scala.annotation.StaticAnnotation
case class Test(
@Foo foo: String,
@Bar bar: String
)